Форматированная запись в файл - C (СИ)
Формулировка задачи:
Помогите пожалуйста, нужно написать программу, суть в следущем:
Имеется файл "C:/Text.txt", в котором записаны через пробел 20 произвольных чисел, необходимо считать их из файла, а потом записать обратно эти числа в виде таблицы 4х5.
Никак не могу понять как это сделать, помогите пожалуйста
#include <stdlib.h> #include <stdio.h> #include <conio.h> int main( void ) { int A[20]; int i,j; FILE *fp; if ( (fp = fopen("C:\\Text.txt", "r")) == NULL) { fprintf(stderr, "Error opening file\n"); exit(1); } for (i=0; i<20; i++) { fscanf(fp, "%d", &A[i]); printf(" %d",A[i]); } fclose(fp); if ( (fp = fopen("C:\\Text.txt", "w")) == NULL) { fprintf(stderr, "Error opening file\n"); exit(1); } // Вот тут надо организовать запись в файл чисел а аиде матрицы 5х4 getch(); fclose(fp); clrscr(); return 0; }
Решение задачи: «Форматированная запись в файл»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> # define ROWS 4 # define COLUMNS 5 # define SIZE (ROWS * COLUMNS) # define FILENAME "file.txt" int main() { int i = 0, j = 0; int data[SIZE] = { 0 }; FILE *pfile = NULL; // open file for read if ( (pfile = fopen (FILENAME, "r")) == NULL) { fprintf (stderr, "\ncan't open file %s\n", FILENAME); exit (1); } // read data for (i = 0; i < SIZE && !feof(pfile) && !ferror(pfile); ++i) { if (fscanf (pfile, "%d ", &data[i]) != 1) { break; } } // check error if ((feof (pfile) && i != SIZE)) { fprintf (stderr, "\nfile %s include less values than %d\n", FILENAME, SIZE); } if (ferror(pfile)) { fprintf (stderr, "\nfail to read data from file %s\n", FILENAME); exit (1); } // close file fclose (pfile); pfile = NULL; // open file for write if ( (pfile = fopen (FILENAME, "w")) == NULL) { fprintf (stderr, "\ncan't open file %s\n", FILENAME); exit (1); } // write data for (i = 0; i < ROWS; ++i) { for (j = 0; j < COLUMNS; ++j) fprintf (pfile, "%3d ", data[i * COLUMNS + j]); fprintf (pfile, "\n"); } // close file fclose (pfile); pfile = NULL; printf ("\noperation complete\n"); system ("PAUSE"); return 0; }
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы: stdio.h и stdlib.h
- Определяются константы ROWS, COLUMNS и SIZE, равные 4 и 5 соответственно, а также массив данных data с размером SIZE
- Определяется имя файла FILENAME, в который будут записываться данные
- Создаются и инициализируются переменные i и j, которые будут использоваться в циклах
- Создается указатель pfile, который будет использоваться для работы с файлами
- Открывается файл FILENAME для чтения с помощью функции fopen
- Проверяется успешность открытия файла с помощью оператора сравнения и выводится сообщение об ошибке в случае неудачи
- Запускается цикл, который будет читать данные из файла до тех пор, пока не встретит символ новой строки или ошибку чтения
- Внутри цикла используется функция fscanf для чтения данных из файла в массив data
- Если в процессе чтения данных произошла ошибка (например, достигли конца файла или возникла ошибка чтения), то цикл прерывается
- Проверяется, было ли пропущено последнее значение в файле из-за ошибки чтения
- Проверяется, были ли ошибки при чтении файла
- Открывается файл FILENAME для записи с помощью функции fopen
- Проверяется успешность открытия файла с помощью оператора сравнения и выводится сообщение об ошибке в случае неудачи
- Запускается цикл, который будет записывать данные из массива data в файл
- Внутри цикла используется функция fprintf для записи данных из массива data в файл
- После завершения цикла выводится символ новой строки
- Проверяется, были ли ошибки при записи в файл
- Выводится сообщение о завершении работы программы
- Вызывается функция system для приостановки выполнения программы до нажатия клавиши
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д