【问题标题】:Validating input using scanf's return value isn't working使用 scanf 的返回值验证输入不起作用
【发布时间】:2018-05-10 11:46:04
【问题描述】:

我正在做一个井字游戏的最终项目。我让用户打印出他要填写的箱号,然后我用整数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 以供用户输入值的行就像从未运行过一样。
我不知道问题是什么。请帮忙。

【问题讨论】:

    标签: c scanf


    【解决方案1】:

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

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

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

    【讨论】:

    • OP 还应该检查文件结尾,即scanf() 返回EOF 以防止无限循环。
    • 我已经检查了第一个站点,它很棒,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-29
    • 2014-02-07
    • 1970-01-01
    • 2013-02-20
    • 1970-01-01
    • 2018-08-21
    • 1970-01-01
    相关资源
    最近更新 更多