有没有一种使用sscanf
循环遍历字符串的好方法?
假设我有一个如下所示的字符串:
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
}
有没有我忘记的简单解决方案?
最佳答案
查找 sscanf()
的 %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;
}
将“行”更改为“数据”,因为您不能递增数组的名称。
关于c - 如何在循环中使用 sscanf?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3975236/