Я пишу код на C, чтобы прочитать матрицы (квадратная матрица с 3 <= dim <= 9) из файла .txt и распечатать его точно так, как написано. Файл организован следующим образом: </p>
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)
в
while (fscanf (arquivo, "% d", & N) == 1)
вывод просто
5
AAAAA
AAAAA
AAAAA
AAAAA
AAAAA
Значение второго цикла scanf в этом случае равно «0».
Как я могу это исправить и напечатать именно то, что написано в файле?
Кстати, я знаю, что есть другие формы для печати .txt точно, как это сделано, я имею в виду, мне не нужны двухмерные массивы, чтобы сделать это. Тем не менее, я буду использовать эту программу для чтения нескольких матриц и выполнения некоторых тестов с ними (также я хочу также распечатать их), поэтому мне действительно нужно хранить данные в матрице символов.