虽然使用continue继续循环,但是使用else语句无限循环

时间:2014-11-08 15:44:26

标签: c while-loop int scanf

我目前正在尝试获取用户输入并查看它是否有效,即他们是否输入了整数而不是字符串,但是,我的程序确实在实现用户没有输入如果它转到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;
 }

2 个答案:

答案 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的调用查看相同的数据,(当然)仍然不能   将它转换为整数,所以循环再次执行,并且   结果仍未改变。