2016-01-31 31 views
2
void main() 
{ 
    int cnt=1; 
    char i; 
    while(cnt<4) 
    { 
     printf("\nenter the character"); 
     scanf("%c",&i); 
     if(i>64 && i<91) 
      printf("\ncharacter is entered"); 
     else 
      printf("\nnumber is entered"); 
     cnt++; 
    } 
} 

在上述程序中,在第二次迭代期間,i自動拍攝10.所以控制進入到else一部分。任何人都可以幫我找到問題所在?的scanf(「%C」)自動讀取10

+0

'如果(i> 64 && i <91)'沒有意義。在包含'ctype.h'後,你應該使用'if(isalpha(i))'來檢查輸入是否是字母表。此外,使用'if((isdigit(i))'來檢查'i'是否是一個數字。 –

+0

感謝您的建議。 – divya

+0

提示:查看ASCII圖表並查看代碼10是什麼意思 –

回答

4

在第一次迭代中,鍵入一個字符並按輸入scanf消耗您輸入的字符,將\n保留在標準輸入流(stdin)中。

在第二次迭代中,scanf看到\n字符消耗它,因此不等待進一步的輸入。

你可以告訴scanf通過讀取並放棄下一個字符:

scanf("%c%*c", &i); 

,或者你可以告訴scanf讀取字符並將其存儲在i之前讀取並放棄所有的空白字符,如果有的話,通過使用:

scanf(" %c",&i); 
/*  ↑ Note the space */