Не работает чтение данных из файла - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Пожалуйста, кто-нибудь, напишите работающий код, который бы позволил открыть файл по имени и прочитать оттуда строку. Никак не получается сделать это самостоятельно, постоянно вылетают какие-то ошибки. Вот например код:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#pragma warning(disable : 4996)
main()
{
    char ch, sl[50];
    char text[] = "one to tree four";
    FILE *pf, *pr;                      // Указатели на файлы
    pf = fopen("new1.txt", "w");  // Создание нового файла new1.txt
    clrscr();
    fprintf(pf, "%s\n", text);        // Запись в файл строки text
    fclose(pf);                            // Закрытие файла pf 
    pf = fopen("new1.txt", "r");   // Открытие файла pf для чтения
    pr = fopen("new2.txt", "w");  // Создание нового файла new2.txt
    while (!feof(pf))                  // Пока не конец файла
 
    {
        ch = getc(pf);                      // Чтение символа ch из файла pf
        if (ch != ' ')
            putc(ch, pr);                    // Запись в файл pr символа ch
 
    }
 
    fclose(pr);                           // Закрытие файла pr
    rewind(pf);                          // Возврат указателя на начало файла pf
    fgets(sl, 50, pf);                     // Чтение из файла pf строки в переменную sl
    printf("%s\n", sl);                 // Вывод строки sl на дисплей
    pr = fopen("new2.txt", "r");   // Открытие файла pr для чтения
    while (!feof(pr))                 // Пока не конец файла pr
 
    {
        ch = getc(pr);                   // Чтение символа из файла pr
        putchar(ch);                  // Вывод символа ch на дисплей
 
    }
 
    fclose(pf);                          // Закрытие файлов
    fclose(pr);
    getch();
 
}
Все же правильно, но компилятор почему то выдает две ошибки.

Решение задачи: «Не работает чтение данных из файла»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
int main() {
    char ch, sl[50];
    char text[] = "one to tree four";
    FILE* pf, *pr;                // Указатели на файлы
    pf = fopen("new1.txt", "w");  // Создание нового файла new1.txt
    system("cls");
 
    fprintf(pf, "%s\n", text);    // Запись в файл строки text
    fclose(pf);                   // Закрытие файла pf
    pf = fopen("new1.txt", "r");  // Открытие файла pf для чтения
    pr = fopen("new2.txt", "w");  // Создание нового файла new2.txt
    while (!feof(pf)) {           // Пока не конец файла
        ch = getc(pf);            // Чтение символа ch из файла pf
        if (ch != ' ') {
            putc(ch, pr);         // Запись в файл pr символа ch
        }
    }
 
    fclose(pr);                   // Закрытие файла pr
    rewind(pf);                   // Возврат указателя на начало файла pf
    fgets(sl, 50, pf);            // Чтение из файла pf строки в переменную sl
    printf("%s\n", sl);           // Вывод строки sl на дисплей
    pr = fopen("new2.txt", "r");  // Открытие файла pr для чтения
    while (!feof(pr)) {           // Пока не конец файла pr
        ch = getc(pr);            // Чтение символа из файла pr
        putchar(ch);              // Вывод символа ch на дисплей
    }
 
    fclose(pf);                   // Закрытие файлов
    fclose(pr);
 
    system("pause");
    return 0;
}

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

  1. Объединение двух строк с помощью оператора | в C не поддерживается напрямую. Вместо этого можно использовать цикл и функцию putc для записи каждого символа в новый файл.
  2. В данном коде используются два указателя на файлы, pf и pr. Указатель pf используется для чтения из первого файла, а pr - для записи во второй файл.
  3. Файл new1.txt создается в режиме w для записи, а затем открывается для чтения. Это означает, что все данные, записанные в файл при первом запуске программы, будут перезаписаны при следующем запуске.
  4. Код пытается считать строку из файла с помощью функции fgets, но не проверяет, была ли строка успешно считана. Если в файле нет символов, функция fgets может вернуть NULL, и это может привести к неопределенному поведению.
  5. В цикле while используется функция getc для чтения символа из файла. Если символ не является пробелом, он записывается в другой файл с помощью функции putc. Это означает, что все символы, кроме пробелов, будут записаны в файл new2.txt.

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


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

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

5   голосов , оценка 4 из 5
Похожие ответы