在C语言中,要输入值到整型变量a中,需要使用
scanf("%d",&a);
如果是在循环中输入,那么一旦出错,就会导致后续均无法输入。
为避免这种情况,可以使用判断scanf的返回值来确定输入是否成功。
以下是循环输入整数,直到遇到-1退出的代码
while(1)
{
scanf("%d",&a);
if(a == -1) break;
printf("%d",a);
}
在这个程序段执行时,如果输入了字母就会导致死循环。
可以修改为
while(1)
{
if(scanf("%d",&a)!=1)
{
getchar();
continue;
}
if(a == -1) break;
printf("%d",a);
}
其原理如下:
scanf 的返回值是实际输入成功变量的个数。当scanf输入一个int型并成功时,会返回1。而遇到了字符时,输入失败,实际输入的数量为0,返回的就是0,这时把缓冲中影响输入的字符用getchar读取,就清除了这个障碍,继续下次读取(continue)。
只有当输入整型正确,scanf返回1时,才会继续执行循环中的其它语句。
在scanf("%d",&a);之前加一句fflush(stdin); 清缓存
如:
int a,b;
printf("enter the number:\n");
fflush(stdin);
scanf("%d",&a);