陷入无限的 fgets 循环

Stuck in infinite fgets loop

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

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;
}

如果要在循环或 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);
}