Не работает чтение данных из файла - 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.