2016-01-31 30 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 */