【发布时间】:2012-02-07 16:20:08
【问题描述】:
我有以下代码:
#include <stdio.h>
#define MIN 0
#define MAX 9
int main()
{
int n;
while (1) {
printf("Enter a number (%d-%d) :", MIN, MAX);
scanf("%d", &n);
if (n >= MIN && n <= MAX) {
printf("Good\n");
} else {
printf("Damn you!\n");
break;
}
}
return 0;
}
只要用户输入一个整数值,上面的代码就可以正常工作。例如,
$ ./a.out
Enter a number (0-9) :15
Damn you!
$ ./a.out
Enter a number (0-9) :5
Good
Enter a number (0-9) :3
Good
Enter a number (0-9) :-1
Damn you!
$ ./a.out
但是,当用户输入任何意外输入时(如<up-arrow> - 这是^[[A,或任何字符串如abc 或abc def 等),它会失败并进入无限循环。
$ ./a.out
Enter a number (0-9) :2
Good
Enter a number (0-9) :^[[A
Good
Enter a number (0-9) :Good
Enter a number (0-9) :Good
Enter a number (0-9) :Good
Enter a number (0-9) :Good
Enter a number (0-9) :Good
Enter a number (0-9) :Good
^C
需要注意的一点:当用户第一次输入<up-arrow>时,按预期工作!例如,
$ ./a.out
Enter a number (0-9) :^[[A
Damn you!
$
为什么会出现这种奇怪的行为?用户输入了不合适的内容,我们应该如何处理?
【问题讨论】:
-
如果您想要防弹输入,那么您需要先将输入作为字符串读取并验证它
标签: c error-handling