Создание, Чтение, Запись в файл - C (СИ)
Формулировка задачи:
Здравствуйте! В задание говорится о двух файлах FileMathA.txt и FileMathB.txt содержащие матрицу 10х10 заполненные числами 1 2 3...n...98 98 100. Цель задание прочесть и сложить матрицы, создать файл FileSumma.txt и записать сумму.
Вроде как все сделано правильно, но мне хочется послушать мнение экспертов, так ли это. Если в коде ошибки к которым не стоит привыкать на ранней стадии изучение программирования?
#include <stdio.h>
#define COLUMNS 10
#define ROWS 10
#define ERROR_CLOSE "Ошибка закрытия файла"
#define ERROR_OPEN "Ошибка открытия файла"
int main(void) {
int i, j, summa;
int matric_MathA[ROWS][COLUMNS];
int matric_MathB[ROWS][COLUMNS];
char *File_MathA = "FileMathA.txt";
char *File_MathB = "FileMathB.txt";
char *File_Summa = "FileSumma.txt";
FILE *open_MathA, *open_MathB, *open_Summa;
// Создание FileMathA.txt & FileMathB.txt (если их нет) |*заполнение файлы числами 1 2 3...n...98 99 100
/* int number = 1;
open_MathA = fopen(File_MathA, "w");
open_MathB = fopen(File_MathB, "w");
if (open_MathA == NULL) {
printf("%s %s\n", ERROR_OPEN, File_MathA);
return 0;
} else if (open_MathB == NULL) {
printf("%s %s\n", ERROR_OPEN, File_MathB);
return 0;
}
for (i = 0; i < ROWS; i++) {
for (j = 0; j < COLUMNS; j++)
{
matric_MathA[i][j] = number++;
matric_MathB[i][j] = matric_MathA[i][j];
fprintf(open_MathA, "%d", matric_MathA[i][j]);
fprintf(open_MathB, "%d", matric_MathB[i][j]);
if (j < COLUMNS-1) {
fprintf(open_MathA, " ");
fprintf(open_MathB, " ");
}
if (j == COLUMNS-1) {
fprintf(open_MathA, "\n");
fprintf(open_MathB, "\n");
}
}
}
if(fclose(open_MathA)) printf("%s %s\n", ERROR_CLOSE, File_MathA);
if(fclose(open_MathB)) printf("%s %s\n", ERROR_CLOSE, File_MathB); */
// Открытие файлов
open_MathA = fopen(File_MathA, "r");
open_MathB = fopen(File_MathB, "r");
open_Summa = fopen(File_Summa, "w");
if (open_MathA == NULL) {
printf("%s %s", File_MathA, ERROR_OPEN);
return 0;
} else if (open_MathB == NULL) {
printf("%s %s", File_MathB, ERROR_OPEN);
return 0;
} else if (open_Summa == NULL) {
printf("%s %s", File_Summa, ERROR_OPEN);
return 0;
}
// Чтения File_MathA & File_MathB, запись в File_Summa
for (i = 0; i < ROWS; i++) {
for (j = 0; j < COLUMNS; j++)
{
fscanf(open_MathA, "%d", &matric_MathA[i][j]);
fscanf(open_MathB, "%d", &matric_MathB[i][j]);
summa = matric_MathA[i][j] + matric_MathB[i][j];
fprintf(open_Summa, "%d", summa);
if (j == COLUMNS-1) fprintf(open_Summa,"\n");
else if (j < COLUMNS-1) fprintf(open_Summa, " ");
}
}
// Закрытие файлов
if(fclose(open_MathA)) printf("%s %s\n", ERROR_CLOSE, File_MathA);
if(fclose(open_MathB)) printf("%s %s\n", ERROR_CLOSE, File_MathB);
if(fclose(open_Summa)) printf("%s %s\n", ERROR_CLOSE, File_Summa);
printf("Сумма матрицы записана в %s.\n", File_Summa);
return 0;
}Решение задачи: «Создание, Чтение, Запись в файл»
textual
Листинг программы
fscanf(open_MathA, "%d", &a); fscanf(open_MathB, "%d", &b); fprintf(open_Summa, "%d ", a + b);
Объяснение кода листинга программы
open_MathA- открывает файл для чтенияopen_MathB- открывает файл для чтенияopen_Summa- открывает файл для записиfscanf(open_MathA,%d, &a);- считывает из файлаMathAцелочисленное значение и сохраняет его в переменнойafscanf(open_MathB,%d, &b);- считывает из файлаMathBцелочисленное значение и сохраняет его в переменнойbfprintf(open_Summa,%d, a + b);- записывает в файлSummaзначение переменнойa+bс пробелом в конце- Результат работы программы будет записан в файл
Summa