Функции ввода/вывода в текстовые файлы 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Функции ввода/вывода в текстовые файлы



 

Чтение символа из потока – getc, fgetc.

 

int getc(FILE *f);

int fgetc(FILE *f);

Функции возвращают очередной символ в форме int из потока f. Если символ не может быть прочитан, то возвращается значение EOF.

 

Запись символа в поток – putc, fputc.

 

int putc(int ch, FILE *f);

int fputc(int ch, FILE *f);

Функции записывают символ ch в поток f. При ошибке возвращается значение EOF, иначе – записанный символ.

 

Чтение строки из потока – fgets.

 

char *fgets(char *s, int n, FILE *f);

Функция читает не более n-1 байт из потока f в строку s, прекращая чтение при обнаружении символа новой строки или конца файла. Символ новой строки при чтении не отбрасывается, а помещается в конец строки. Прочитанная строка дополняется ограничителем строки ('\0'). При обнаружении ошибки или конца файла возвращается NULL. При успешном завершении чтения функция возвращает указатель на строку s.

 

Запись строки в поток – fputs.

 

int fputs(const char *s, FILE *f);

Функция записывает строку символов s в поток f. Символ конца строки в файл не записывается. При ошибке возвращает значение EOF, иначе – неотрицательное число.

 

Форматированный ввод из потока – fscanf.

 

Функция fscanf () имеет следующий прототип:

int fscanf(FILE *f,const char *format[, address,...]);

Она во всем аналогична функции scanf (), за исключением того, что форматированный ввод осуществляется не со стандартного устройства ввода, а из файлового потока f.

 

Форматированный вывод в поток – fprintf,

 

Функция fprintf () имеет следующий прототип:

int fprintf(FILE *f, const char *format[, argument,...])

Она во всем аналогична функции printf (), но осуществляет форматированный вывод не на стандартное устройство вывода, а в файловый поток f.

 

1.2.7 Функция определения конца файла – feof ()

 

Функция feof () является на самом деле макросом и позволяет осуществлять проверку на достижение символа конца файла при операциях ввода-вывода. Она имеет следующий прототип:

int feof(FILE *f);

Она возвращает ненулевое значение, если был обнаружен конец файла при последней операции ввода в поток f и 0, если конец файла еще не достигнут.

Рассмотрим пример файлового ввода и вывода. Перед использованием данной программы следует убедится в наличии файла D:\MyLoveFile.txt. Его можно создать с помощью редактора Блокнот:

 

FILE *in, *out;

if ((in = fopen("D:\\MyLoveFile.txt", "rt")) == NULL)

{

printf(RUS("\nНевозможно открыть файл D:\MyLoveFile.txt.\n"));

getch();

return 1;

}

if ((out = fopen("D:\\MyLoveFile.bak", "wt")) == NULL)

{

printf(RUS("\nНевозможно открыть файл D:\MyLoveFile.ВАК.\n"));

getch();

return 1;

}

while (!feof(in))

fputc(fgetc(in),out);

fclose(in);

fclose(out);

printf(RUS("Копия MyLoveFile.ВАК файла MyLoveFile.txt успешно создана.\n"));

 

Функции ввода/вывода с помощью объектов

 

Библиотека fstream.h предоставляет возможность программировать ввод и вывод в файл по аналогии с объектами cin и cout библиотеки iostream.h.

Открытие файла для чтения осуществляется назначением объекта класса входных потоков:

ifstream in("d:\Test1.txt");

Здесь in – имя объекта, который далее может использоваться подобно объекту cin, но информация будет читаться не с клавиатуры, а из файла, имя которого указано в скобках.

Аналогично открывается файл для записи:

ofstream out("d:\Test2.txt")

Здесь out – имя объекта, который далее может использоваться подобно объекту cout, но информация будет записываться не на дисплей, а в файл, имя которого указано в скобках.

Проверка открытия файла производится как проверка создания объекта, например:

if(!in) //если файл не открывается или не создается

{      //работу программы закончить

cout<<RUS("Файл не открыт\n");

getch();

return 1;

}

После завершения работы с файлом его следует закрыть:

in.close();

 

Пример программы ввода/вывода с помощью библиотеки fstream

 

Допустим, что в файле хранятся сведения о мониторах. В каждой строке указан тип, оптовая и розничная цены и примечание. Для простоты данные в каждой строке записаны единообразно: первую строку занимает тип монитора, далее 2 строки целые числа, представляющие оптовую и розничную цены, затем строка – примечание.

Приведенная ниже программа построчно считывает данные из текстового файла в буферную переменную s, затем суммирует оптовые и розничные цены и выводит результат на экран и в файл.

 

ifstream in("d:\\Test1.txt");

if(!in)

{cout << RUS("Ошибка открытия входного файла"); getch();return 1;}

ofstream out("d:\\Test2.txt");

if(!out)

{cout << RUS("Ошибка открытия выходного файла"); getch();return 1;}

char s[20][80];

int i=0,op=1,ros=2;

while (!in.eof())

{in>>s[i];i++;}

float sop=0; float sros=0;

while (op<i-1)

{sop+=atof(s[op]);op+=4;}

while (ros<i-1)

{sros+=atof(s[ros]);ros+=4;}

for(int j=0;j<i-1;j++)

{out<<s[j]<<"\n"; cout<<RUS(s[j])<<"\n";}

cout<<"\n"<<RUS("Сумма оптовых цен = ")<<sop;

cout<<"\n"<<RUS("Сумма розничных цен = ")<<sros;

out<<"\n"<<"Сумма оптовых цен = "<<sop;

out<<"\n"<<"Сумма розничных цен = "<<sros;

in.close();

out.close();

 



Поделиться:


Последнее изменение этой страницы: 2021-11-27; просмотров: 48; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.19.29.89 (0.01 с.)