c语言逐行读取文件数据并放入数组中

源文件txt里面的数据格式:
id attribute
59603 15
63769 15 11 11 15 11 11 11 11
68219 15
71682 12 6 12 12 12 16 16 12 12
我想逐行读取放入数组中,并且第一列的数据(id)跳过去将其保存在另外一个文件(out.txt)里,每次读取一个数组我会对其使用函数fun()计算一个值并将其放入out.txt中与其对应的id号后面
行数很多,每行的列数不一定

//刚写的下面的代码,测试通过,如果有疑问,欢迎交流
//只要忽略数组的第一个元素的就可以了
//另外需要需要,可以把数组修改为二维数组
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(){
char tar[10000];
int cur_lib[1000];
char *ch;
FILE * fp = fopen("tar.txt", "r");
while(fgets(tar, 10000, fp)!=NULL){
ch = strtok(tar, " ");
int cur_count = 0;
while(ch!=NULL){
cur_lib[cur_count] = atoi(ch);
ch = strtok(NULL, " ");
cur_count++;
}
}
fclose(fp);
return 0;
}

追问

我想将每行放入数组的元素显示出来,然后在第二个while里加入了printf("%d\t",cur_lib[cur_count]);但是显示出来的有乱码,第1个图是源数据,我把id都删了,只剩下数据了,就想将每行数据存入一个数组,将其打印出来,调用一个函数计算该行数组得出一个值,

追答

如果这样话,估计应该是你添加的语句有错误,我刚测试了:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(){
char tar[10000];
int cur_lib[1000];
char *ch;
FILE * fp = fopen("tar.txt", "r");
while(fgets(tar, 10000, fp)!=NULL){
ch = strtok(tar, " ");
int cur_count = 0;
while(ch!=NULL){
cur_lib[cur_count] = atoi(ch);
printf("%d ", cur_lib[cur_count]);
ch = strtok(NULL, " ");
cur_count++;
}
printf("\n");
}
fclose(fp);
return 0;
}

追问

还有个问题就是我输出的时候每行都显示个0

追答

恩,这个是因为数据的每一行最后都多了一个空格。
为了解决这个问题,可以修改下程序。我是之前把最后一个空格都去掉了。

追问

那为什么71682那一行的最后一个没有0?该怎么改啊

追答我修改了下,主要是因为最后有空格+回车换行的时候,会出现这种问题,修改之后,处理了换行的情况,然后就不会输出多余的0了
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(){
char tar[10000];
int cur_lib[1000];
char *ch;
FILE * fp = fopen("tar.txt", "r");
while(fgets(tar, 10000, fp)!=NULL){
ch = strtok(tar, " ");
int cur_count = 0;
while(ch!=NULL){
if(strcmp(ch, "\n") != 0){
cur_lib[cur_count] = atoi(ch);
printf("%d ", cur_lib[cur_count]);
cur_count++;
}
ch = strtok(NULL, " ");
}
printf("\n");
}
fclose(fp);
return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-07-23
#include<stdio.h>

int main()
{
    FILE *fp;
    int i = 0;
    char data[100][80];
    fp = fopen("1.txt", "r");
    if (!fp) 
        return -1;
    while (!feof(fp)) 
        fgets(data[i++], 80, fp);
    fclose(fp);
}

相似回答