c - 当输入不是数字时,进入无限循环

标签 c

我只是一个初学者,我正在尝试制作一个程序,要求输入一个数字,如果输入一个字母,它会说“这不是一个数字”并再次要求输入一个数字,直到输入一个数字。

但是,我的程序一直在使用当前代码进入无限循环。解决此问题的任何帮助将不胜感激。另外,如果没有输入任何内容,我也希望程序说“请输入一些东西”,但不知道该怎么做。谢谢。

#include <stdio.h>

int main()
{
    float i;
    printf("enter a number");
    while(scanf("%f", &i) != 1)
    {
        puts("That is not a number.");
        scanf("%f", &i);
    }
}

最佳答案

您需要在 scanf 失败后清除来自标准输入的错误输入:

#include <stdio.h>

int main()
{
    float i;
    char trash[1024];

    while (1) 
    {
        printf("Please enter a number: ");
        fflush(stdout);

        if (1 == scanf("%f", &i))
          break;

        /* scanf failed: clear the bad input from stdin */

        if (NULL == fgets(trash, sizeof(trash), stdin))  /* NOTE: assumes 1 entry per line and no line longer than 1023 characters */
          exit((fprintf(stderr, "Unexpected EOF or error!\n"), 1));

        puts("That is not a number.");
    }

    printf("You entered: %f!\n", i);

    return 0;
}

作为清除行的 fgets() 的替代方法,您可以调用 scanf("%1023s", trash),它只会吸收下一个以空格分隔的字符系列。例如,这将允许您在一行中处理多个条目,其中错误混合在一起。

关于c - 当输入不是数字时,进入无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28578356/

相关文章:

c - 应用计算着色器后纹理不会更新

c - 正则表达式:匹配c中的 float

c++ - 在 linux 中使用 win32 api?

c - 尝试理解冒泡排序函数

c - 如何保存栈和堆

c - 为什么以 0 开头的整数打印出来很奇怪?

c - 无法使用命令提示符执行 SSH\

c++ - 可移植可执行文件是否可以在代码段中直接绝对引用外部库,而不是通过 IAT?

c - 尝试从本地 HTTP 服务器写入文本文件

c - typedef 内部如何工作?