繁体   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