使用scanf的返回值验证输入无效

时间:2018-05-10 11:46:04

标签: c scanf

我正在进行一个井字游戏最终项目。我要求用户打印他要填写的箱号,然后我使用整数 err 来获取 scanf 的返回值。在这种情况下,Scanf应该返回它已经读取的整数的数量,并且我要求读取一个整数,所以只要err!= 1,它就应该进入while循环。但是,这不起作用。

        printf("\nBox number: ");
        int boxNumber, err;
        err = scanf("%d", &boxNumber);

        while (err != 1) {
            printf("\nWrong input.");
            printf("\nBox number: ");
            err = scanf("%d", &boxNumber);
        } 

输入非整数时,输出为:

输入错误。
箱号:

在不停循环中。然后再次调用 scanf 的行,以便用户输入值,就好像从不运行一样。
我不知道问题是什么。请帮忙。

1 个答案:

答案 0 :(得分:6)

在第一个scanf()失败后,非整数仍保留在输入流中,并阻止任何后续成功,同时保持永久。

您需要摆脱不可扫描的延迟输入。

请参阅这些文章以选择您喜欢的方法:
http://sekrit.de/webdocs/c/beginners-guide-away-from-scanf.html
How to read / parse input in C? The FAQ