【发布时间】:2014-10-01 16:04:28
【问题描述】:
这个程序似乎在 while 循环的每次迭代中都不接受输入,理想情况下它应该接受。但是当我用 %d 替换 scanf() 函数的 %c 参数时(即整数输入而不是char 输入)它似乎工作得很好,while 循环的每次迭代都接受该输入。为什么我会看到这种差异?
int main()
{
char grade;
int i=0;
while(i<10){
printf("Enter ur grade\n");
scanf("%c", &grade);
switch(grade){
case 'A' : printf("U R THE BEST\n");
break;
case 'B' : printf("U R VERY GOOD DUDE...\n");
break;
case 'C' : printf("U R GOOD DUDE...\n");
break;
case 'D' : printf("U R Not good DUDE...\n");
break;
case 'E' : printf("U R WORST DUDE...\n");
break;
default : printf("U r AWESOME...\n");
break;
}
i++;
}
【问题讨论】:
-
你能举一个你得到的输入和输出的例子吗?
-
scanf 不会从输入缓冲区中删除换行符。 SO上有很多重复:stackoverflow.com/questions/13275417/…(不是真正的重复,而是解决您的问题)
-
每次输入一个字符(实际上是在输入两个字符)时,输入流中都会留下一个换行符 (
\n) 字符,它会在下一次迭代中使用。您需要使用getchar()或类似技术清除它。 -
添加 fflush(stdin);扫描后
-
你的牙套不平衡。还有
for(int i = 0; i < 10; ++i)怎么了?