【发布时间】:2010-10-04 04:15:00
【问题描述】:
这是一段代码,它应该一遍又一遍地循环,直到用户输入一个介于 0 和 15 之间的数字
int input;
do
{
printf("Enter a number => ");
scanf("%d",&input);
printf("\n %d \n",input);
}
while (!(input>0 && input <15));
但是,如果用户输入“gfggdf”之类的内容,则会导致循环一遍又一遍地重复,并且永远不会再次提示用户输入......控制台看起来像这样
Enter a number =>
0
Enter a number =>
0
Enter a number =>
0
Enter a number =>
0
Enter a number =>
0
Enter a number =>
0
(looping indefinitely)
看完这本书后,似乎我需要做这样的事情来防止这种情况发生。
int input, error, status;
char skip_ch;
do
{
error = 0;
printf("Enter a number => ");
status = scanf("%d",&input);
printf("\n %d \n",input);
if(status!=1)
{
error=1;
}
else if(input < 0 || input >15){
error = 1;
}
do
{
scanf("%c",&skip_ch);
}while(skip_ch != '\n');
}
while (error);
我了解需要检查 scanf 状态以确保它是有效输入,我不了解内部 do-while 循环。我觉得这本书从来没有真正向我解释过为什么需要像这样多次调用 scanf ,就像 scanf 缓冲区以某种方式被一堆垃圾填满了,它以某种方式通过循环一百万次来清理它你。
谁能给我解释一下这个黑魔法?
【问题讨论】:
-
这本书的正确率是 25%。 始终检查输入函数的返回值。如果存在读取错误(坏扇区、媒体已删除……)或文件在 '\n' 之前结束,则最后一个 scanf 可能会进入无限循环