如何在循环中使用sscanf?

有一个很好的方式来循环sscanfstring?

比方说,我有一个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; } 

由于无法增加数组的名称,因此将“行”更改为“数据”。