从C中的文件中读取2个不同的列并将它们存储在2个不同的数组中?

时间:2016-01-08 01:00:38

标签: c arrays

我对C中的文件处理不是很熟悉。我有一个.txt文件包含这样的内容:

135.33208225150605 OK
165.1233490789463 OK
245.2329542568199 OK
301.9041144959863 D

我希望将数字存储在double数组中,将字符串列存储在另一个字符串数组中。

我做了类似的事情:

FILE *fp;
fp = fopen("protocol1QT.seq", "r");
int i;
for(i=0;i<=148;i++){

    fgets(buff,sizeof(buff),fp);
    char *buffcopy = malloc(strlen(buff) + 1);
    if(buffcopy == NULL) {fprintf(stderr, "out of memory\n"); exit(1); }
    strcpy(buffcopy, buff);
    line[i] = buffcopy;
    }

   fclose(fp);

它读得非常好,但我如何单独阅读并存储在2个不同的数组中?

2 个答案:

答案 0 :(得分:1)

要么将其与strtok()分开,要么只是这个简单的案例就像这样使用sscanf()

char text[10]; // more if it could be larger
float number;
if (sscanf(line, "%f%9s", &number, text) == 2)
    process_columns(number, text);

另外:在fp之前检查NULL fgets(),并将fgets()置于for状态。

答案 1 :(得分:1)

类似的东西:

FILE *fp;
fp = fopen("protocol1QT.seq", "r");
int i;
double dv;

for(i=0;i<=148 && fscanf(fp, "%lf %[^\n]", &dv, buff)==2;i++){
    char *buffcopy = malloc(strlen(buff) + 1);
    if(buffcopy == NULL) {fprintf(stderr, "out of memory\n"); exit(1); }
    strcpy(buffcopy, buff);
    string_array[i] = buffcopy;//char *string_array[149];
    numbers[i] = dv;           //double numbers[149];
}
fclose(fp);