2016-11-17 46 views
0
#include<iostream.h> 
#include<conio.h> 
#include<ctype.h> 
void main() 
{ 
    clrscr(); 
    int a; 
    cout<<"Enter a digit"; 
    cin>>a; 
    if(isdigit(a)) 
    { 
     cout<<"You have entered a digit"; 
    } 
    else 
    { 
     cout<<"Not a digit"; 
    } 
    getch(); 
} 

該代碼顯示沒有錯誤,但每次輸入數字時都顯示「不是數字」。isdigit()不能在簡單的程序中工作?

+0

''?你使用什麼編譯器?標題是''。 – PaulMcKenzie

+0

我正在使用Turbo C7 –

+0

''正常工作太 –

回答

2
int a; 
std::cin >> a; 

這段代碼(或者你有些過時的變體)從控制檯讀取文本並將該文本轉換爲整數值。因此,如果在控制檯上鍵入0,則值a將爲0,而不是'0'isdigit告訴您傳遞給它的字符值是否表示一個數字,而0不是,所以結果幾乎肯定是正確的。如果您將值讀入char類型的變量,您將獲得您期望的行爲。

char a; 
std::cin >> a; 
2

使用cin>>a提取的整數,將讀取從輸入一個數字(幾個數字),並把它轉換成其二進制值。

例如,如果鍵入10a值將是10。如果那麼解釋這個值,就好像它在isdigit(a)是一個字符,它將被理解爲ASCII/ANSI/UTF8相當於10,是'\n',這顯然不是一個數字。

爲了得到期望的結果,請將a設爲字符。

+1

''\ n''不需要有10的值,儘管它通常是這樣。 –

+0

@PeteBecker你當然是對的。這只是一個例子,對於ascii,ansi和utf8編碼來說幸運的是,EBCDIC在Windows上相對不常見;-) – Christophe

+0

''\ n''是**運行時庫**視爲換行符的字符常量。也就是說,它的值是編譯器和運行時庫之間的契約的一部分。如果我在源代碼中編寫''\ n'',它的值**不取決於我在運行時可能使用的字符編碼。 –