gpt4 book ai didi

c - 将文件中的数字读入数组

转载 作者:行者123 更新时间:2023-12-01 11:12:02 24 4
gpt4 key购买 nike

我想使用 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 character encoding , 前任。 1 数字用十进制数字 49 表示。

因为ascii编码中的0,1,2 ... 9位是按递增顺序编码的,所以只需减去48(即'0'字符)即可将一个数字字符转换为它是机器格式 Just - '0'.

将循环更改为:

for(i=0;i<length;i++){
list[i]=0;
list[i]+=100*(fgetc(fp2) - '0');
list[i]+=10*(fgetc(fp2) - '0');
list[i]+=(fgetc(fp2) - '0');
fgetc(fp2);
}

这也解释了程序的当前输出。如果你不从数字中减去 '0',那么例如对于 107 你会得到:

100 * '1' + 10 * '0' + '7' =
100 * 49 + 10 * 48 + 55 =
5435

494855 是数字 10 7

关于c - 将文件中的数字读入数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59035824/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com