虽然循环验证输入是C中的数字?

时间:2017-02-26 06:39:47

标签: c input while-loop

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

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

1 个答案:

答案 0 :(得分:0)

如果scanf无法执行请求的转换,则会保持输入流不变。因此,当您的检查正确时,您需要在重新尝试再次读取数字之前清理错误输入的输入流。

您可以使用scanf本身和输入抑制修饰符:

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

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