陷入无限的fgets循环

时间:2016-09-10 18:18:31

标签: c while-loop fgets

我正在尝试获取整数输入,并尝试了我能找到的最基本的方法。但是,只要某个东西不是整数,它就会陷入无限循环。我相信它是由fgets功能引起的。我尝试了一些我在这个网站上找到的解决方案,但都没有。代码如下

int getint()
{
    int number;
    char input[4];

    fgets(input, 4, stdin);
    while ( atoi(input) < 0 || ( strcmp(input, "0") != 0 && atoi(input) == 0 ) )
        printf("Insert a non negative number: ");
        fgets(input, 4, stdin);
    number = atoi(input);
    printf("%d\n", number);

    return number;
}

1 个答案:

答案 0 :(得分:0)

如果要在循环或if语句中写入多个语句,则必须使用大括号{}来定义循环中的哪些语句。

在您的代码中,只有printf("Insert a non negative number: ");语句在循环中,并且没有任何内容在循环中更改input的值,因此如果循环的条件是是的,它永远都是真的。

将其更改为:

while ( atoi(input) < 0 || ( strcmp(input, "0") != 0 && atoi(input) == 0 ) )
{
    printf("Insert a non negative number: ");
    fgets(input, 4, stdin);
}