我正在尝试验证用户输入。 如果输入无效,我试图要求用户重新插入正确的数字(双精度)值。
程序无法运行,进入无限循环。
请给我任何建议,我该怎么做? 谢谢。!!
int main() {
double t; /* Input from user */
int check;
check = 0;
/* This loop is use to validate the user input. *
* For example: If the user insert a character value "x". *
* i am trying to ask the user to insert a valid numeric value. */
while (check == 0)
{
printf("Insert the value: ");
if (scanf(" %lf", &t) == 1) {
check = 1; /* Everythink okay. No loop needed */
}
else
{
printf("Failed to read double. ");
check = 0; /* loop aganin to read the value */
fflush( stdout );
}
}
return 0;
}
预期结果:
$ ./a.out
插入值:X
无法读取双倍。
插入值:5
实际结果:
$ ./a.out
插入值:X
插入值:无法读取双精度。插入值:无法读取双精度。 (循环)...
答案 0 :(得分:0)
如果我输入了无效字符,程序将进入无限循环...如果我输入了无效字符,则程序将进入无限循环
OP的代码只是试图重新尝试以不断转换相同的失败数据。
当scanf(" %lf", &t) == 0
时,非数字输入保留在stdin
中,需要删除。 @Eugene Sh.。
int conversion_count = 0;
while (conversion_count == 0) {
printf("Insert the value: ");
// Note: lead space not needed. "%lf" itself consumes leading space.
// if (scanf(" %lf", &t) == 1) {
conversion_count = scanf("%lf", &t);
// conversion_count is 1, 0 or EOF
if (conversion_count == 0) {
printf("Failed to read double.\n");
fflush(stdout);
int ch;
// consume and discard characters until the end of the line.
while ( ((ch = getchar()) != '\n') && (ch != EOF)) {
;
}
if (ch == EOF) {
break;
}
}
}
if (conversion_count == 1) {
printf("Read %g\n", t);
} else {
printf("End-of-file or input error\n");
}