【发布时间】:2016-04-26 15:24:13
【问题描述】:
我有以下代码要求用户输入 (lowWarp)。输入必须从 1.0 到 10.0。如果我输入 0.2,它允许我尝试输入另一个值。但是,如果我输入 1/2 或 asdf 之类的内容,它就会开始无休止地循环。如何防止这种情况,而是允许输入正确的值?
while (badData == true)
{
printf("Enter the low warp factor; warp factor = \n");
scanf_s("%f", &lowWarp);
if (lowWarp < 1.0 || lowWarp > 10.0) //Determines if number is between 1.0 - 10.0
{
badData = true;
printf("Invalid input! Range is 1.0 - 10.0.\n");
lowWarp = 0.0;
}
else
{
badData = false;
}
}
【问题讨论】:
-
使用
fgets()读取输入然后解析它。 -
对于交互式会话,请始终阅读整行。
-
scanf_s()在使用 '%f' 时永远不会输入 alpha 字符(它会占用任何空格) 强烈建议检查返回值(不是参数值)以确保操作成功。 (在这种情况下,返回值应为 1。)当返回值不是 1 时,使用类似以下内容的方式清理标准输入:int ch; while( (ch = getchar()) != EOF && '\n' != ch );
标签: c validation input output