【问题标题】:Passing string when program expect int in C [duplicate]当程序期望C中的int时传递字符串[重复]
【发布时间】:2020-07-21 09:26:27
【问题描述】:

我有以下代码:

#include <stdio.h>

int main(){

    int a;

    while(1)
    {
        scanf("%d", &a);
        if(a >= 1000000 || a <= 9999)
        {
            printf("Error");
        }
        else
        {
            break;
        }
    }

return 0;
}

我希望用户输入类似 20201 的内容,如果输入无效,它将重新开始,但我注意到当我输入 2020.1 时程序返回:

ErrorErrorErrorErrorErrorErrorError...

并且一直循环,永远不会再问号码,为什么会发生这种情况?代码不是假设只打印一条错误消息并在scanf中再次等待输入吗?

【问题讨论】:

  • 检查输入是否无效,需要检查scanf的返回值。并且清理输入缓冲区,这样就不会一次又一次地被读取……或者使用更好的输入法,比如fgets
  • 卡在小数点上,保留在输入缓冲区中,

标签: c loops while-loop scanf stdin


【解决方案1】:

是的,它应该是。然而,在这里,当匹配失败发生时(由于输入中存在.),输入保留在输入缓冲区中,并馈送到scanf()的下一次调用,只是再次失败,因此进入无限状态循环。

发生故障后,您需要清除无效输入的输入缓冲区。为此,您必须检查scanf() 的返回值以确保扫描成功。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-31
    • 2013-09-14
    • 2017-03-25
    相关资源
    最近更新 更多