C-数字检查功能提供无限循环

C- number checking function gives infinite loop

我正在尝试编写一个将获取数字的小函数。
该功能应该是防白痴的,因此,如果出现警告,它将发出警告。 有人输入了一个字符。

我写了一个类似下面的函数,但是如果我输入一个非整数,程序会给我一个无限循环,不断重复printf"无效数字",这样我就永远没有机会进行正确的输入。

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    for (int ret = 0; ret < 1;)
    {
        int num;

        printf("
 Please input a number:"
);
        ret = scanf ("%d", &num);
        if (ret < 1)
            printf ("
Not a valid number!"
);
        else
            printf("
You input %d"
, num);
    }
    return 0;
}

如何解决?


将此行if (y = 0)替换为此if (y == 0)


注意下面的行,其中有关于吃掉输入缓冲区的注释。 由于您的scanf在输入缓冲区中找不到所需的内容,因此错误的输入只会停留在该位置,并且永远失败,除非您执行某些操作以"吃掉"它。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    printf("Hello world!
"
);
    while ('A')
    {
        int x, y;
        printf("
 x:"
);

        y = scanf ("%d", &x);
        printf("
x = %d"
, x);
        if (y < 1)
        { // eat the input buffer so we can try again
            while ( getchar() != '
'
);
            printf ("
WRONG!"
);
        }
    }

    return 0;
}