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

问题描述 投票:3回答:3

我想用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;
}
c arrays text-files fgetc
3个回答
3
投票

用于在“可读”文件中存储数字的字符不是“数字”。最受欢迎的编码是ascii character encoding,例如。 1数字用十进制数字49表示。


1
投票

问题是您正在读取每个数字的(可能)ASCII值,并假设这是该数字的值。您需要从每个值中减去零字符的值,如下所示:


1
投票

[将数字读入cstrings然后使用stdlib函数atoi将每个字符串转换为数字,然后再加载到ints数组中可能会更简单:

© www.soinside.com 2019 - 2024. All rights reserved.