簡體   English   中英

從文本文件中讀取網格並將其存儲在二維數組中?

[英]Reading a grid from a text file and storing it within a two-dimensional array?

假設您有一個名為“ input.txt”的文件,如下所示:

5
0 0 0 0 0 
0 0 0 0 0 
0 1 1 1 0 
0 0 0 0 0 
0 0 0 0 0 

上方5 x 5的網格。 您想將5 x 5網格存儲到二維C數組中。 我的問題是將文件讀取到該網格中。

這是我的C文件,它讀取數據,將其存儲在2D 整數數組中並輸出其內容

int main (int argc){

    FILE *fp;
    char ch;
    int **C; //Our 2D Array
    char filenamein[] = "input.txt";

    fp = fopen(filenamein,"r"); 

    N = (ch = fgetc(fp)) - 48; 

    //Initialize Grid, set all cells to 0
    C = malloc(N * sizeof(int *));
      for (i = 0; i < N; i++) {
             C[i] = malloc(N * sizeof(int));
      }
    for (i=0;i<N;i++) {
     for (j=0;j<N;j++) {
       C[i][j]=0;
     }
    }

   //Read array, store into array
    while ((ch = fgetc(fp) ) != EOF)
    {
    for (i=0;i<N;i++){
        for (j=0;j<N;j++){
        C[i][j] = ch - 48;
        }
    }
    }

    //Print 2D Array:

     for (i = 0; i < N; i++) {
             for (j = 0; j < N; j++)
               printf("%d ", C[i][j]);
             printf("\n");
           }

fclose(fp);
}

打電話給我得到:

-38 -38 -38 -38 -38
-38 -38 -38 -38 -38
-38 -38 -38 -38 -38
-38 -38 -38 -38 -38
-38 -38 -38 -38 -38

網格從我推導出的內容中輸出了空格/ NULL的字符到十進制ASCII碼,所以我的問題是將文本文件讀入數組。

如何讀取文本文件以將數字存儲到數組中?

此代碼按預期方式工作。 最好使用fscanf代替fgetc但我沒有在您的代碼中更正此錯誤。

#include <stdio.h>
#include <stdlib.h>

int main (int argc, char *argv[])
{
    FILE *fp;
    unsigned char ch;
    int **C; //Our 2D Array
    int N, i, j;
    char filenamein[] = "input.txt";

    fp = fopen(filenamein,"r");

    N = (ch = fgetc(fp)) - 48;

    //Initialize Grid, set all cells to 0
    C = malloc(N * sizeof(int *));
    for (i = 0; i < N; i++)
        C[i] = malloc(N * sizeof(int));

    for (i = 0; i < N; i++)
        for (j = 0; j < N; j++)
            C[i][j] = 0;

    i = 0;
    j = 0;
    do {
        ch = fgetc(fp);
        if (ch != ' ' && ch != '\n') {
            C[i][j] = ch - 48;
            j++;
            i += j / N;
            j %= N;
        }
    } while(i < N && j < N);

    //Print 2D Array:
    for (i = 0; i < N; i++) {
        for (j = 0; j < N; j++)
            printf("%d ", C[i][j]);
        printf("\n");
    }
    fclose(fp);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM