【发布时间】:2015-08-06 01:24:41
【问题描述】:
我正在尝试获取用户输入(小时)并按如下方式对其进行验证:
- 必须是 1 到 12 之间的数字
我需要检查非数字输入并提醒用户。
我有以下代码:
char hour;
scanf("%c", &hour);
while ( !(isdigit(hour)) || (hour < 1 && hour > 12)) {
printf("Invalid. Try again: ");
scanf("%c", &hour);
}
当这个循环运行时,我输入了多个非数字字符,我得到以下信息:
Enter the hour: rewe
Invalid. Try again: Invalid. Try again: Invalid. Try again: Invalid. Try again: Invalid. Try again:
在最后一个“无效。再试一次:”之后,我可以根据我的代码再次输入一些内容。
我只是不知道发生了什么以及为什么它会多次打印出错误消息(输入的字符数 + 1)。我也认为范围检查根本不起作用。我已经尝试了很多变体(包括 do-while 循环)来尝试让它工作,但我碰壁了。
【问题讨论】:
标签: c error-handling while-loop scanf