這個程序在while循環的每次迭代中似乎都不會接受輸入,理想情況下它應該如此。但是,當我用%d替換scanf()函數的%c參數(即一個整數輸入,而不是一個字符輸入),它似乎只是工作絕對好,哪個輸入接受每循環的while循環。爲什麼我看到這種差異?C:循環內的scanf()
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++;
}
你能舉一個你得到的輸入和輸出的例子嗎? – 2014-10-01 16:06:54
scanf不會從輸入緩衝區中刪除換行符。許多dups上SO:http://stackoverflow.com/questions/13275417/why-scanfd-does-not-consume-n-while-scanfc-does(不真的愚蠢,但解決您的問題) – 2014-10-01 16:07:09
每次你輸入char(實際上是輸入兩個字符),在輸入流中留有一個換行符('\ n'),這將在下一次迭代中消耗。你需要用'getchar()'或類似的技術來清除它。 – 2014-10-01 16:07:17