Ваш входной цикл неверен:
- вы сбрасываете
i
в 0
в начале каждой итерации
- вы используете неправильный тест:
while (!feof(fp))
. Узнайте здесь, почему: Почему «while (! Feof (file))» всегда неверно? . Вместо этого вы должны проверить индекс массива по длине массива и проверить, удалось ли fscanf()
прочитать следующее значение.
Вот исправленная версия:
for (i = 0; i < 16; i++) {
if (fscanf(fp,"%d",&n) != 1) { //reads the file containing matrix
fprintf(stderr, "invalid input\n");
exit(1);
}
b[i] = n;
printf("%d\n", n);
}
Обратите внимание, что вы не считываете значения в 2D матрицу, поэтому цикл вывода имеет неопределенное поведение, поскольку a
неинициализирован.
Вот улучшенная версия:
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *fp;
int i, j, a[4][4];
fp = fopen("Output.txt", "r");
if (fp == NULL) {
fprintf(stderr, "Error: Cannot open file Output.txt for reading\n");
exit(1);
}
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
if (fscanf(fp, "%d", &a[i][j]) != 1) {
fprintf(stderr, "invalid input for a[%d][%d]\n", i, j);
fclose(fp);
exit(1);
}
}
}
fclose(fp);
fp1 = fopen("Output2.txt", "w");
if (fp1 == NULL) {
fprintf(stderr, "Error: Cannot open file Output2.txt for writing\n");
exit(1);
}
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
fprintf(fp1, "%d\t", a[i][j] * 2);
}
fprintf(fp1, "\n");
}
fclose(fp1);
return 0;
}