【发布时间】:2020-11-15 17:49:44
【问题描述】:
我是 c 语言的新手,并试图在我的程序中编写一个故障保护,以防用户输入错误。
这是故障安全部分:
int h1, m1;
char junk; /* Storing a colon or a period when people type in the hour */
printf("Enter start hour: ");
while (scanf("%d %c %d", &h1, &junk, &m1) != 3)
{
printf("Invalid, try again\n");
}
在任何输入错误的情况下(例如输入 char 而不是 int),循环只会无限继续下去。如果我单独扫描每个变量,或者在迭代结束时将它们分配为 0,则无关紧要。
我在 Stack 中搜索了答案,但只找到了字符串的方法(基本上移至 'fgets' 或 'isdigit()')或仅用于扫描单个整数。
有没有办法对 int 和 char 数据类型的扫描进行故障保护?
【问题讨论】:
-
junk是什么?小时、分钟和秒所有内容都是整数,检查小时、分钟和秒的范围,如果它们在正确的范围内,则仅继续,否则报告错误。 -
我很不清楚。您当前的代码有什么问题?
-
有一些方法不使用字符串,但它们很笨拙。如果您知道典型的良好输入是什么,请输入一个两倍长度的字符串,并使用
sscanf()解析它,而不是使用scanf()。如果输入不符合规范,只需获取另一个。如果用户犯了一个简单的错误,那将很容易处理。如果用户试图弄乱它,或者不知道该怎么做,那么无论如何你都无能为力,除了继续要求输入。
标签: c