做......虽然Loop不停地打印

时间:2015-02-21 01:37:51

标签: c

我有这段代码询问用户年龄,如果输入不是数字,它将返回并再次询问用户。但由于某种原因,它只是打印第一个printf语句不停止。我做错了什么?

do
{
    printf("Please enter your age: ");
    scanf("%d", &age);
    if (age == 0)
    {
    printf("Please make sure to only enter an integer: ");
    scanf("%d", &age);
    }
} while (isdigit(age) == 0);

1 个答案:

答案 0 :(得分:4)

isdigit()将始终返回0,除了一些特殊值,请尝试52

isdigit()函数用于ascii值,如果ascii值对应于数字,则返回1,否则返回0,因此对于大多数输入的数字,结果为0

如果您需要在输入非数字字符时停止循环,则需要检查scanf()返回值,以及它的用途。

如果您尝试再次询问用户某个值,则会出现问题,因为如果输入缓冲区中遗留了'\n'个字符,scanf()将忽略它,并继续读取,导致到无限循环,所以这应该适合你

printf("Please enter your age: ");
while ((scanf("%d", &age) != 1) || (age == 0))
{
    int chr;
    do {
        chr = getchar();
    } while ((chr != EOF) && (chr != '\n'));
    printf("Please make sure to only enter an integer: ");
}