while循环来验证输入是C中的数字吗?
这个问题在这里已经有了答案:
如果scanf
未能预先执行请求的转换,则会使输入流保持不变。 所以,当你的检查是正确的,你需要清除错误输入的输入流,然后重新尝试再次读取一个数字。
你可以用scanf
本身和输入抑制修饰符来做到这一点:
float num1;
while (scanf("%f",&num1)==0)
{
printf("Invalid input. Please enter a number: ");
scanf("%*s");
}
%*s
将指示scanf
解析输入,就好像它试图转换一串字符(从流中删除进程中的字符),但是由于星号,它不会尝试将它写入任何地方。