[英]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.