c - C 中的 while 循环验证输入是数字?

标签 c input while-loop

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

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

最佳答案

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

您可以使用 scanf 本身和输入抑制修饰符来完成此操作:

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

%*s 将指示 scanf 解析输入,就像尝试转换字符串一样(从流中删除进程中的字符),但是谢谢到星号,它不会尝试将其写入任何地方。

关于c - C 中的 while 循环验证输入是数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42465538/

相关文章:

objective-c - 在不传递 nil 的情况下迭代函数中可变数量的参数

c - 如何知道运行时是否使用了 sockaddr_storage

c - Vanilla C fopen 到相邻文件夹的路径

c - WinAPI - 对话框 : how does disabled main window flash dialog on mouseclick?

javascript - HTML 输入和 Javascript 不返回值

javascript - ember 输入辅助值作为数组

c - 如何在c宏中链接加号或减号?

python - while循环更改变量[python]中的递归函数

c++ - 不确定要更改什么才能让 char break 语句

c - 这个while循环的时间复杂度是多少?