所以今天我试图找到一种方法来检查这个输入是否是一个数字。到目前为止,我无法找到使这段代码工作的方法。如果我输入一个数字,while循环结束,这是我的意图。但是,如果我输入任何其他内容,代码应该打印printf一次,然后重新提示我输入(通过回扫顶部的scanf语句)。但它反而无限地打印printf语句。我该如何解决这个问题?
float num1;
while (scanf("%f",&num1)==0)
{
printf("Invalid input. Please enter a number: ");
}
答案 0 :(得分:0)
如果scanf
无法执行请求的转换,则会保持输入流不变。因此,当您的检查正确时,您需要在重新尝试再次读取数字之前清理错误输入的输入流。
您可以使用scanf
本身和输入抑制修饰符:
float num1;
while (scanf("%f",&num1)==0)
{
printf("Invalid input. Please enter a number: ");
scanf("%*s");
}
%*s
将指示scanf
解析输入,就好像它正在尝试转换一串字符(从流中删除流程中的字符),但是由于星号,它不会试图把它写在任何地方。