【发布时间】:2020-04-09 12:10:53
【问题描述】:
我想写一个程序来读取用户输入的一行,格式如下:<Name>,<Age>,<City>
- 名称只能包含英文字母、空格和
-。 - 年龄必须是 18 到 120 之间的整数。
- 城市只能包含英文字母和
-。
每个都可以是 49 号。 我想存储信息并打印信息错误将打印错误输入。
我的代码如下:
char str[150];
char input[3][50] = { 0 };
int num = 0;
if (fgets(str, 150, stdin) != NULL) {
num = sscanf(str, "%[a-zA-Z -],%[0-9],%[a-zA-Z-]", input[0], input[1], input[2]);
}
if (num < 3) {
printf("ERROR\n");
}
问题在于,对于 Name1$#,20,NY、Best,19,Rome123 或 Best,100,Paris1$ 等输入,将不会打印错误,其中城市格式错误(带有尾随字符)。有什么方法可以使用sscanf 解决它?
【问题讨论】:
-
注意:
%[...]说明符不是正则表达式。 -
char str[150];太短了,你需要最少 49+1+49+1+49+1+1 (倒数第二个 +1 是换行符,最后一个 +1 是字符串终止 @ 987654331@ 字符)。好吧,除非您注意阅读此处显示的代码之外的换行符。 -
@pmg:另外,
%[…]说明符中范围的使用取决于实现。