如何在循环中使用sscanf?
有一个很好的方式来循环sscanf
string?
比方说,我有一个string,看起来像这样:
char line[] = "100 185 400 11 1000";
我想打印这个总和。 我真的想写的是这样的:
int n, sum = 0; while (1 == sscanf(line, " %d", &n)) { sum += n; line += <number of bytes consumed by sscanf> }
但没有干净的方式来从sscanf
获取这些信息。 如果它返回了消耗的字节数,那就很有用。 在这种情况下,可以使用strtok
,但是能够写一些与stdin
相似的东西是很好的:
int n, sum = 0; while (1 == scanf(" %d", &n)) { sum += n; // stdin is transparently advanced by scanf call }
有没有简单的解决scheme,我忘记了?
查找sscanf()
和family的%n
转换说明符。 它给你你需要的信息。
#include <stdio.h> int main(void) { char line[] = "100 185 400 11 1000"; char *data = line; int offset; int n; int sum = 0; while (sscanf(data, " %d%n", &n, &offset) == 1) { sum += n; data += offset; printf("read: %5d; sum = %5d; offset = %5d\n", n, sum, offset); } printf("sum = %d\n", sum); return 0; }
由于无法增加数组的名称,因此将“行”更改为“数据”。