【发布时间】:2019-11-25 16:08:02
【问题描述】:
我想使用 fgetc() 命令从文件中读取中间有空格的 3 位数字,并将它们放入一个数组中,该数组当前不工作,因为结果数组中有完全不同的对象。我究竟做错了什么? (我使用了一个包含“107 313 052 614”的文件,导致输出“5435 5641 5380 5942”)
我的代码:
#include<stdio.h>
#include<stdlib.h>
void print_array(int* arrayp, int lengthp){
int i;
for(i=0;i<lengthp;i++){
printf("%i ", arrayp[i]);
}
return;
}
int main(){
int length=1;
int i;
FILE *fp1;
fp1 = fopen("durations.txt", "r");
fgetc(fp1);fgetc(fp1);fgetc(fp1);
while(fgetc(fp1)!=EOF){
length++;
fgetc(fp1);
fgetc(fp1);
fgetc(fp1);
}
fclose(fp1);
int* list = (int*) malloc(sizeof(int)*length);
FILE *fp2;
fp2 = fopen("durations.txt", "r");
for(i=0;i<length;i++){
list[i]=0;
list[i]+=100*(fgetc(fp2));
list[i]+=10*(fgetc(fp2));
list[i]+=(fgetc(fp2));
fgetc(fp2);
}
fclose(fp2);
print_array(list, length);
return 0;
}
【问题讨论】:
-
用于存储数字的字符不是数字。它们很可能使用 ascii 编码进行编码。
-
查看 fscanf,您使用它与 printf 和 sprintf 完全一样,带有一个指定格式的字符串,因此在您的情况下,对于整数,格式为“%d %d %d”,然后传递地址&list[0]、&list[1]、&list[2]每一项中,格式前的第一个参数为文件指针。它在 C 中运行良好:cplusplus.com/reference/cstdio/fscanf
标签: c arrays text-files fgetc