Форматированная запись в файл - 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;
}

Объяснение кода листинга программы

  1. Включаются необходимые заголовочные файлы: stdio.h и stdlib.h
  2. Определяются константы ROWS, COLUMNS и SIZE, равные 4 и 5 соответственно, а также массив данных data с размером SIZE
  3. Определяется имя файла FILENAME, в который будут записываться данные
  4. Создаются и инициализируются переменные i и j, которые будут использоваться в циклах
  5. Создается указатель pfile, который будет использоваться для работы с файлами
  6. Открывается файл FILENAME для чтения с помощью функции fopen
  7. Проверяется успешность открытия файла с помощью оператора сравнения и выводится сообщение об ошибке в случае неудачи
  8. Запускается цикл, который будет читать данные из файла до тех пор, пока не встретит символ новой строки или ошибку чтения
  9. Внутри цикла используется функция fscanf для чтения данных из файла в массив data
  10. Если в процессе чтения данных произошла ошибка (например, достигли конца файла или возникла ошибка чтения), то цикл прерывается
  11. Проверяется, было ли пропущено последнее значение в файле из-за ошибки чтения
  12. Проверяется, были ли ошибки при чтении файла
  13. Открывается файл FILENAME для записи с помощью функции fopen
  14. Проверяется успешность открытия файла с помощью оператора сравнения и выводится сообщение об ошибке в случае неудачи
  15. Запускается цикл, который будет записывать данные из массива data в файл
  16. Внутри цикла используется функция fprintf для записи данных из массива data в файл
  17. После завершения цикла выводится символ новой строки
  18. Проверяется, были ли ошибки при записи в файл
  19. Выводится сообщение о завершении работы программы
  20. Вызывается функция system для приостановки выполнения программы до нажатия клавиши

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.714 из 5