如何从字符串中扫描未知数量的元素?

时间:2013-03-28 02:40:22

标签: c arrays scanf

我正在尝试从字符串中扫描多个整数,但我不知道它会有多少,因为它因情况而异。 我想扫描多个数字并将它们放在一个数组中。

我一直试图这样做,但它不起作用...... 假设我想从字符串“line”中扫描C号。

for(a=0;a<c;a++)
    sscanf(line, " %d ",&v[a]);

3 个答案:

答案 0 :(得分:1)

假设您有足够的空间存储整数。

char * c_num = NULL;
for(c_num = strtok(line, " \t\n"), a = 0; c_num != NULL && a < c; c_num = strtok(NULL, " \t\n"), a++){
    v[a] = atoi(c_num);
}

答案 1 :(得分:1)

我写了一段代码,以帮助您更清楚地理解它。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void){
    int v[10];
    char buffer[4096];

    char * line = NULL;
    int i, j;


    if(fgets(buffer, 4096, stdin) == NULL){
        return -1; 
    }   

    for(i = 0, line = strtok(buffer, " "); i < 10; i++){
        if(line == NULL){
            break;
        }   

        sscanf(line, "%d", &v[i]);
        line = strtok(NULL, " "); 
    }   
    j = i;

    for(i = 0; i < j; i++){
        printf("%d\n", v[i]);
    }   

    return 0;
}

[neo]:./a.out 
1 2 3 4 5 9999
1
2
3
4
5
9999

答案 2 :(得分:0)

我终于把它钉了!谢谢你所有的帮助人员;)

f = fopen(argv[1],"r");
fgets(line,c,f);

line2 = strtok(line, " ");

while (line2 != NULL){

    sscanf(line2, "%d",&v[i]);

    line2=strtok(NULL, " ");
    i++;
}