Программирование >>  Элементы языков с и с++ 

1 ... 59 60 61 [ 62 ] 63 64 65 ... 200


Здесь fp - указатель файла (file * fр;). Функция выдает ненулевое значение, если операция с файловым потоком завершается с ошибкой (например, возникает ошибка чтения файла). Для обработки ошибок ввода/вывода следует записать эту функцию перед блоком работы с файлом в виде:

if (ferror( fp) ) {команды обработки ошибок ввода/вывода}.

Как только произойдет ошибка, выполнится эта функция, и начнут работать команды обработки ошибок.

D Функция exit о .

Формат:

exit(int status);

Эта функция используется для срочного завершения работы программы при обработке ошибок открытия файла (и не только для этого, а для прерывания работы программы по каким-либо другим причинам). Но перед завершением все файлы закрываются, остатки данных, находяшиеся в буфере вывода, записываются в память и вызываются функции обработки ошибок, предварительно зарегистрированные специальной функцией atexito. Эти функции обработки ошибок надо самому написать и зарегистрировать их с помошью вызова функции atexit ().

Для вызова функции atexito требуется выполнить команду linclude <stdiib.h>. Каждый вызов atexito регистрирует новую функцию exit о. Можно зарегистрировать до 32-х функций exit о. Они будут выполняться по принципу работы стековой памяти: последний вошел- первый вышел (т.е. последняя зарегистрированная функция будет выполнена первой). Поясним сказанное на примере программы, приведенной в листинге 9.2 (результат работы программы показан на рис. 9.1).

;тинг 9.2

34.срр : Defines the entry point for the console application.

Jinclude stdafx.h Jinclude <stdio.h> tinclude <stdlib.h>



/*это первая функция exit О */ void exit fnl(void) {

printf( Exit function #1 called\n );

/*это вторая функция exit () */ void exit fn2(void)

printf ( Exit function #2 calledW);

/*это основная программа, в которой происходит регистрация заданных ваш функций exit о . Здесь же применяется и сама функция exitO, которая перед завершением работы программы станет вызывать зарегистрированные функции, определенные выше */

int tinain (void) {

/* регистрация функции #1 */ atexit(exit fnl);

/* регистрация функции #2 */ atexit(exit fn2);

/♦exitО сначала вызовет функцию #2, т. к. она была зарегистрирована последней, а затем - функцию #1. После этого программа завершится.*/

exit(О); return 0;

C:\WINDOWS\systein32\cFnd.exe

Ixit function Й2 called xit function ttl called [яя продолжения нажмите любуй клавишу

Рис. 9.1. Результат работы программы листинга 9.2

Какое бы числовое значение вы не подставили вместо аргумента функции, вызов зарегистрированных функций exit () все равно произойдет. Если же не



Пример ввода/вывода файла

Создадим программу, которая вводит данные с клавиатуры и записывает их в текстовый файл. Результат ее работы можно прочитать обычным Блокнотом.

[зарегистрирована ни одна функция, то произойдет завершение программы. [Регистрация функций exit о действительна только в пределах одной про-I граммы.

Стандартный ввод/вывод

При запуске любой программы автоматически открываются сразу три файла:

П файл стандартного ввода. Его указатель называется stdin;

О файл стандартного вьшода. Его указатель называется stdout;

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

При работе с файлами мы можем использовать эти указатели, чтобы направлять данные в стадартные потоки, в которых по умолчанию ввод идет с кла-виагуры, а вывод - на экран. Например, чтобы ввести строку с клавиатуры, можно применить функцию fgets () в виде: fgets(5,maxline, stdin) ;

адля вывода строки на экран - функцию fputs () в виде:

fputs(5, stdout) ;

Из приведенного выше перечня функций, обслуживающих ввод/вывод, мы видели, что сушествуют функции getc (fp), putc (с, fp), которые, соответственно, вводят один символ из файла с указателем f р и пишут один символ в файл с указателем fp. Если вместо указателя fp, который имеет тип file, в эти функции поместить указатели стандартного потока, то они станут, соответственно, вводить один символ с клавиатуры и выводить его на экран. Оказывается, что ранее применяемые нами в примерах функции getchar о, putchar о связаны в файле stdio.h со стандартными потоками следующим образом:

Idefine getchar () getc (stdin) Idefine putchar () putc (stdout)

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



1 ... 59 60 61 [ 62 ] 63 64 65 ... 200

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика