Не работает чтение данных из файла - 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; }
Объяснение кода листинга программы
- Объединение двух строк с помощью оператора
|
в C не поддерживается напрямую. Вместо этого можно использовать цикл и функцию putc для записи каждого символа в новый файл. - В данном коде используются два указателя на файлы, pf и pr. Указатель pf используется для чтения из первого файла, а pr - для записи во второй файл.
- Файл
new1.txt
создается в режимеw
для записи, а затем открывается для чтения. Это означает, что все данные, записанные в файл при первом запуске программы, будут перезаписаны при следующем запуске. - Код пытается считать строку из файла с помощью функции fgets, но не проверяет, была ли строка успешно считана. Если в файле нет символов, функция fgets может вернуть NULL, и это может привести к неопределенному поведению.
- В цикле while используется функция getc для чтения символа из файла. Если символ не является пробелом, он записывается в другой файл с помощью функции putc. Это означает, что все символы, кроме пробелов, будут записаны в файл
new2.txt
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д