我目前正在尝试获取用户输入并查看它是否有效,即他们是否输入了整数而不是字符串,但是,我的程序确实在实现用户没有输入如果它转到else语句,则输入一个整数,除非它没有重新启动循环,而只是打印单词"请再试一次"无限循环中的一百万次。我已经尝试过实现continue语句,但它似乎创建了同样的问题,任何输入都会非常感激!
这是一个片段:
int userInput;
int exit;
exit = 0;
while(exit == 0)
{
if(scanf("%d",&userInput) == 1)
function(userInput);
else
printf("Please try again!\n"); //This loops infinite times, doesn't restart the loop and check input again like the first if
continue;
}
答案 0 :(得分:0)
添加
scanf("%*s");
在else
的正文中删除stdin
的无效输入。当exit
成功时,您可能还希望将scanf
设置为1,以防止无限循环。因此,请将代码修改为:
int userInput;
int exit;
exit = 0;
while(exit == 0)
{
if(scanf("%d",&userInput) == 1) {
function(userInput);
exit=1;
}
else
{
printf("Please try again!\n");
scanf("%*s");
}
}
答案 1 :(得分:0)
请参阅此答案:https://stackoverflow.com/a/3852934/3788
原始代码无限循环,因为无效数据( 当scanf失败时," gfggdf")不会从输入缓冲区中删除 将它转换为整数 - 它留在输入缓冲区中,所以下一个 对scanf的调用查看相同的数据,(当然)仍然不能 将它转换为整数,所以循环再次执行,并且 结果仍未改变。