我正在尝试编写一个从用户的stdin读取的代码,并检查输入是否为整数。
这是我的功能:
int Test(int *integer)
{
int input = *integer;
int check;
do
{
check = scanf("%d", &input);
if(check == 1) // return value should be 1
{
*integer= input;
break;
}
else
{
printf("Error Message")
}
}while(check!=1 && getchar() != '\n');
return 0;
}
主:
int digit = 0;
Test(&digit);
如果我输入例如“a”它只给我一条“错误信息”并要求我再次输入但是如果我输入“fooooo”它会给我5条或更多错误信息然后让我再次输入。有谁知道问题是什么?
答案 0 :(得分:1)
您只需执行此操作即可修复程序:
else {
printf("Error Message");
while(getchar() != '\n');
}
代码失败的原因:如果输入不是数字,转换将被中断,缓冲区中还剩下字符。下一轮将一次消耗一个角色,直到没有剩下一个角色。
上面的while循环将从缓冲区读取,直到换行,从而有效地清空缓冲区中不需要的字符。