簡體   English   中英

從C中的文件讀取時出現怪異循環

[英]Weird loop while reading from a file in C

我正在用C語言編寫一個代碼,以從.txt文件中讀取矩陣(方陣3 <= dim <= 9)並打印出它的確切編寫方式。 該文件的安排如下:

5
AAAAA
AAAAA
AAAAA
AAAAA
AAAAA
6
XXXXXX
XXXXXX
XXXXXX
XXXXXX
XXXXXX
XXXXXX

第一個數字表示后續矩陣的大小。

我寫了以下代碼:

int main () {
    FILE *arquivo;
    char A[9][9];
    int N;
    int i,j;
    char temp;
    arquivo = fopen("matrizes.txt", "r");
    if (!arquivo) printf("Erro.\n");
    while (fscanf(arquivo, "%d", &N) != EOF) {   
        printf("%d \n", N);
        fgetc(arquivo);
        for (i = 0; ((i < N) && (temp = fgetc(arquivo)) != '\n') ; i++) {
            for (j = 0; j < N; j++) {
                A[i][j] = temp;
            }
        }
        for (i = 0; i < N; i++) {
            for(j = 0; j<N; j++) {
                printf("%c", A[i][j]);
            }
            puts(" ");
        }
    }
    return 0;
}

輸出是這個

5 
AAAAA 
AAAAA 
AAAAA 
AAAAA 
AAAAA 
5 
AAAAA 
AAAAA 
AAAAA 
AAAAA 
AAAAA 
5 
AAAAA 
AAAAA 
AAAAA 
AAAAA 
AAAAA 
5 
AAAAA 
AAAAA 
AAAAA 
AAAAA 
AAAAA 
5 
AAAAA 
AAAAA 
AAAAA 
AAAAA 
AAAAA 
6 
XXXXXX 
XXXXXX 
XXXXXX 
XXXXXX 
XXXXXX 
XXXXXX 
6 
XXXXXX 
XXXXXX 
XXXXXX 
XXXXXX 
XXXXXX 
XXXXXX 
6 
XXXXXX 
XXXXXX 
XXXXXX 
XXXXXX 
XXXXXX 
XXXXXX 
6 
XXXXXX 
XXXXXX 
XXXXXX 
XXXXXX 
XXXXXX 
XXXXXX 
6 
XXXXXX 
XXXXXX 
XXXXXX 
XXXXXX 
XXXXXX 
XXXXXX 
6 
XXXXXX 
XXXXXX 
XXXXXX 
XXXXXX 
XXXXXX 
XXXXXX 

老實說,我不知道為什么會這樣。 我嘗試了不同的條件來停止循環,但沒有一個程序能解決。

如果我改變

while(fscanf(arquivo,“%d”,&N)!= EOF)

進入

而(fscanf(arquivo,“%d”,&N)== 1)

輸出是

5
AAAAA
AAAAA
AAAAA
AAAAA
AAAAA

在這種情況下,第二個循環scanf的值為“ 0”。 我該如何解決它並准確打印文件上寫的內容?

順便說一句,我知道還有其他形式可以精確打印.txt的格式,我的意思是,我不需要2D數組來執行此操作。 但是,我將使用該程序讀取多個矩陣並對它們進行一些測試(我也想將它們打印出來),因此我確實需要將數據存儲在字符矩陣中。

問題在這里。

   for (i = 0; ((i < N) && (temp = fgetc(arquivo)) != '\n') ; i++) {
        for (j = 0; j < N; j++) {
            A[i][j] = temp;
        }
    }

一旦看到換行符,循環將退出並再次開始while循環。

相反,您想讀取N行。

    for (i = 0; i < N; i++) {
        for(j = 0; (temp = fgetc(arquivo)) != '\n'; j++ ) {
            A[i][j] = temp;
        }
    }

暫無
暫無

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

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