scanf在本程序里只接受整型字符,如果输入字符A而非一个数字,这时scanf停在那里,并把A(或者不管是什么)放回输入。没有把任何值赋给指定的变量,下一次如果还用scanf读取输入,它就在A处重新开始。当然,如果不读取输入,scanf的返回值是0,因此可以根据返回值判断是否遇到字母之类的数从而需要重新输入,不过此时要用getchar语句吸收这个A,否则它永远不会越过去从而读取下一个数。
我根据楼主的改进需求描述把代码改了改:
#include<stdio.h>
int main(void)
{
int i;
while(!scanf("%d",&i))
{
printf("输入错误,请重新输入\n");
while(getchar()!='\n')\\这两行就实现吸收错误的输入,包括每次输入最后的回车,否则下次输入不能进行
continue;
}
printf("%d",i);
return 0;
}