2010-10-20 101 views
20

有没有一种很好的方式来循环与sscanf字符串?如何在循环中使用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 
} 

有一个简单的解决方案,我忘了?

回答

35

查找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; 
} 

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

+0

+1,你打我吧。 – schot 2010-10-20 06:33:36

+1

+1,你是怎么知道这个的? – 2010-10-20 07:55:09

+0

@绿色代码:在我的情况'人sscanf'。 – schot 2010-10-20 10:18:59