我对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个不同的数组中?
答案 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);