从C

时间:2015-10-13 04:30:42

标签: c scanf

1 2 3 4 5
1 2 3 4 5
1 2 3
2 5 7 8 9 8

我是C的初学者,我想写一个小程序,但我遇到了这个问题。

问题是:如果文件中包含整数,则每行的整数数不同,但都在最大整数数内。

例如,上面的整数,每行的最大整数数为6,每行可以有1到6个整数。每个文件的最大整数数也会改变。

如何将这些数字存储到2D数组中?或者将整数逐行存储到数组中。 (不要担心空值)

我尝试使用fscanf,但我不知道如何定义每次阅​​读的整数。

================================ 感谢大家的慷慨帮助,我已经想出了使用Joachim Pileborg的想法。

#define MAX_SIZE_BUFFER 1000

FILE *file;
int len = MAX_SIZE_BUFFER;
char sLine[MAX_SIZE_BUFFER];
int i, j, maxnumber = 6;
int *numbers, *temp;
char *sTok;

numbers = (int *) malloc(sizeof(int) * maxnumber);
for (i = 0; i < maxnumber; i++) {
    numbers[i] = -1;
}

while (fgets(sLine, len, file) != NULL) {
    i = 0;
    sTok = strtok(sLine, " ");
    while (sTok != NULL) {
        numbers[i] = atof(sTok);
        sTok = strtok(NULL, " ");
        i++;
    }

    /* This temp stores all the numbers of each row */
    temp = (int *) malloc(sizeof(int) * i);
    for (j = 0; j < i; j++) {
        temp[j] = numbers[j];
    }

}

上面的代码没有完成,但它是我如何做到这一点的想法。

2 个答案:

答案 0 :(得分:4)

解决问题的一种方法是逐行阅读(例如使用fgets)。然后,对于每一行,您需要分离&#34;令牌&#34; (整数)你可以用例如strtok循环播放。最后,转换每个&#34;令牌&#34;使用例如字符串到整数strtol

答案 1 :(得分:1)

让我们试试:fscanf(fp, "%d", value)

fp:文件指针。

&#34;%d&#34;:您想要阅读的值的格式(可以是%c,%f,...)。

value:用它来保存刚从文件中读取的值。

当然,如果你想阅读文件中的所有内容,你应该将它放入循环中。 EOF是打破循环的条件。