【发布时间】:2019-03-31 10:43:48
【问题描述】:
我是 C 新手,在 C 中使用 sscanf() 时遇到问题。
我的代码提示用户输入几行数据。单个数据就像一个 Python 元组 (1, 3) 或 (-3, 2),每行可能包含多个由零个或多个空格分隔的“元组”,我的代码如下,
char buffer[100];
while(fgets(buffer, sizeof buffer, stdin) != NULL) {
while(sscanf(&buffer, "%*[^0-9|-]%i%*[^0-9|-]%i", &key, &value) != 1) {
break;
}
printf("key==%d, value==%d\n", key, value);
}
我使用 fgets 读取用户输入的每一行,并使用 sscanf 获取一个元组,但似乎 sscanf 无法匹配一行中的第二个元组(或如何匹配)。为什么?还是有一些更明智的解决方案来解决我的问题?
【问题讨论】:
-
更简单的格式字符串
" (%d ,%d )%n"也应该可以工作,每个标点符号前包含的空格将过滤任何空格。 -
@WeatherVane 这似乎无法正常工作,因为 fgets 函数读取了用户的所有键盘输入。如果用户在键盘上按向左或向右,fgets 也会将它们读入缓冲区...
-
@JasperZhou 但你试过了吗?它与接受的答案结合在一起,因为它获取扫描的字节数。它不会过滤掉意外按下的键,只有空格:垃圾输入 - 垃圾输出!理想情况下,您拒绝任何无意义的行。