Создание, Чтение, Запись в файл - 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
целочисленное значение и сохраняет его в переменнойa
fscanf(open_MathB,
%d, &b);
- считывает из файлаMathB
целочисленное значение и сохраняет его в переменнойb
fprintf(open_Summa,
%d, a + b);
- записывает в файлSumma
значение переменнойa+b
с пробелом в конце- Результат работы программы будет записан в файл
Summa
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д