【问题标题】:While loop to validate input is a number in C? [duplicate]验证输入的循环是C中的数字吗? [复制]
【发布时间】:2017-02-26 06:39:46
【问题描述】:

所以今天我试图找到一种方法来检查这个输入是否是一个数字。到目前为止,我找不到使此代码正常工作的方法。如果我输入一个数字,while 循环就会结束,这是我的意图。但是,如果我输入其他任何内容,代码应该打印一次 printf,然后重新提示我输入(通过 scanf 语句回到循环顶部)。但它会无限打印 printf 语句。我该如何解决这个问题?

float num1;
while (scanf("%f",&num1)==0)
    {
        printf("Invalid input. Please enter a number: ");
    }

【问题讨论】:

标签: c input while-loop


【解决方案1】:

如果scanf 未能执行请求的转换,它将保持输入流不变。因此,虽然您的检查是正确的,但您需要在重新尝试再次读取数字之前清除错误输入的输入流。

您可以使用 scanf 本身和输入抑制修饰符来做到这一点:

float num1;
while (scanf("%f",&num1)==0)
{
  printf("Invalid input. Please enter a number: ");
  scanf("%*s");
}

%*s 将指示 scanf 解析输入,就好像它正在尝试转换字符串(从流中删除进程中的字符),但由于有星号,它不会尝试写入它任何地方。

【讨论】:

  • 原来修复了我的代码!非常感谢您的帮助!
猜你喜欢
  • 2012-11-10
  • 2020-12-25
  • 2011-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-10
  • 1970-01-01
相关资源
最近更新 更多