如何按整数读取文件整数并将它们放入二维数组?

Posted

技术标签:

【中文标题】如何按整数读取文件整数并将它们放入二维数组?【英文标题】:How can I read a file integer by integer and put them into a 2D array? 【发布时间】:2022-01-23 04:20:46 【问题描述】:

我正在尝试从 txt 文件中读取所有数字并将它们放入二维数组中。我不应该担心大小和东西,因为我知道它将输入 9 行,每行将有 9 个数字。但如果我运行这段代码,我会得到以下输出。

int main() 
    FILE *fpointer = fopen("filename.txt", "r");
    int ch;
    int arr[9][9];
    for (int i = 0; i < 9; i++) 
        for (int j = 0; j < 9; j++) 
            ch = fgetc(fpointer);
            arr[i][j] = ch;
            //printf("%d", ch);
        
    
    for (int i = 0; i < 9; i++) 
        for (int j = 0; j < 9; j++) 
            printf("%d  ", arr[i][j]);
        
        printf("\n");
    
    fclose(fpointer);
    return 0;

输出:

49  51  52  53  54  55  48  57  50
10  52  50  49  57  56  51  55  52
49  10  51  49  50  52  57  56  55
49  51  10  52  50  51  53  49  51
53  49  49  10  50  51  52  54  51
53  55  50  49  10  53  50  51  54
55  56  50  52  53  10  54  52  54
53  56  57  51  50  49  10  53  52
57  50  57  56  51  53  54  10  50

但输入的数字是:

134567092
421983741
312498713
423513511
234635721
523678245
646589321
549298356
234698721

我认为它可能与fgets() 函数有关,但我尝试使用getw(),但得到的数字更糟。也许它会尝试以十六进制或其他方式读取文件。有什么想法吗?

【问题讨论】:

查找ASCII, 49 = 0x31 = '1', 51 = 0x33 = '3'等 【参考方案1】:

我不完全确定您在这里希望的行为是什么,但我建议您在将数字存储到数组中之前解码 ASCII 数字,如下所示:

arr[i][j] = ch - '0';

另外,请注意fgetc 将返回像 10 这样的行尾字节,因为这些也是文件中的字符,即使它们不完全可见。因此,当您收到其中一个时,您需要将其丢弃并再次致电fgetc。或者,您可以在每行的末尾(就在您的 j 循环之后)插入一个额外的 fgetc 调用来阅读这些内容。

【讨论】:

【参考方案2】:

看起来您需要将字符从数字的 ascii 表示形式转换为实际数字。另见:Convert a character digit to the corresponding integer in C

所以这部分:

    for(int j =0; j<9;j++)
        ch = fgetc(fpointer);
        arr[i][j] = ch;
        //printf("%d", ch);
    

会变成这样:

    for(int j =0; j<9;j++)
        ch = fgetc(fpointer);
        if(isdigit(ch)) 
            ch = ch - '0';
         else 
            printf("error: Non-digit found!\n");
            exit(1);
        
        arr[i][j] = ch;
        //printf("%d", ch);
    

【讨论】:

以上是关于如何按整数读取文件整数并将它们放入二维数组?的主要内容,如果未能解决你的问题,请参考以下文章

SSE2:将二维数组中的有符号整数与双精度数相乘并将结果相加在 C 中

从 .txt 文件中读取未知大小的整数二维数组的最有效方法是啥?

如何获得二维数组中每一列和每一行的总和?

C如何将.txt文件的内容放入二维数组

如何在Objective-C中将二维整数数组对象添加到NSMutableArray?

递归之求二维数组的最短路径给定一个整数和一个数组任意选择数组中的数累加能否得到该整数