while循环不等待scanf输入("%d")

时间:2016-04-02 21:10:46

标签: c while-loop

我有一个while循环,它打印一个整数提示。我想在用户输入字符时进行错误检查,例如' a'。但是,当我输入' a'时,它会打印"输入种子:种子必须是整数值,请再试一次"永远。

int getSeed() {
    int scanned, seed;

    while (scanned == 0) {
       printf("Enter the seed: ");
       scanned = scanf("%d", &seed);
       if (scanned == 0) {
          printf("Seed must be an integer, try again\n");
       }
    }
    return seed;
}

如何打印

Enter the seed: a Seed must be an integer, try again Enter the seed:

感谢。

编辑:解决了,我添加了getchar();在scanf之后。

1 个答案:

答案 0 :(得分:0)

scanf检查输入字符,发现它与转换说明符不匹配,因此将其放回输入流中。
然后,在代码中while循环再次到达scanf,上面的过程再次发生(因为您在输入流中写入的a仍然存在)

因此,更好的解决方案是将其作为字符(或字符串)读取,然后将其转换为整数。