所以今天我试图找到一种方法来检查这个输入是否是一个数字。到目前为止我还找不到让这段代码工作的方法。如果我输入一个数字,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/