Теория вычислительных процессов и структур — страница 5

  • Просмотров 6047
  • Скачиваний 318
  • Размер файла 78
    Кб

процедуры fopen указывает на строку, определяющую режим доступа. Она может принимать следующие основные значения: r - открыть файл filename только для чтения (если файл не существует, то процедура fopen вернёт нулевой указатель NULL); w - создать файл filename и открыть его только для записи (если файл не существует, то он будет усечён до нулевой длины); а - открыть файл filename только для записи, все данные будут добавляться в конец файла (если файл не

существует, он создаётся). Следующий пример программы показывает использование процедуры fopen. При этом, если файл indata существует, то он открывается для чтения, а файл outdata создаётся (или усекается до нулевой длины, если он существует). Процедура fatal предназначена для вывода сообщения об ошибке. Она просто передаёт свой аргумент процедуре perror, а затем вызывается exit для завершения работы программы: #include <stdio.h> char *inname = “indata”; char

*outname = “outdata”; main() { FILE *inf, *outf; if ((inf = fopen (inname, “r”)) = = NULL) fatal (“Невозможно открыть входной файл”); if ((outf = fopen (outname, “w”)) = = NULL) fatal (“Невозможно открыть выходной файл”); /* Выполняются какие-либо действия */ exit (0); } Основные процедуры для ввода строк называются gets и fgets: # include <stdio.h> char *gets (char *buf); char *fgets (char *buf, int nsize, FILE *inf); Процедура gets считывает последовательность символов из потока стандартного ввода (stdin), помещая все символы в буфер,

на который указывает аргумент buf. Символы считываются до тех пор, пока не встретится символ перевода строки или конца файла. Символ перевода строки newline отбрасывается, и вместо него в буфер помещается нулевой символ, образуя завершённую строку. В случае возникновения ошибки или при достижении конца файла возвращается значение NULL. Процедура fgets является обобщённой версией процедуры gets. Она считывает из потока inf в буфер buf до тех

пор, пока не будет считано nsize-1 символов или не встретится раньше символ перевода строки newline, или не будет достигнут конец файла. В процедуре fgets символы перевода строки newline не отбрасываются, а помещаются в конец буфера (это позволяет вызывающей функции определить, в результате чего произошёл возврат из процедуры fgets). Как и процедура gets, процедура fgets возвращает указатель на буфер buf в случае успеха и NULL – в противном случае.

Следующая процедура yesno использует процедуру fgets для получения положительного или отрицательного ответа от пользователя, она также вызывает макрос isspace для пропуска пробельных символов в строке ответа: # include <stdio.h> # include <stype.h> #define YES 1 #define NO 0 #define ANSWSZ 80 static char *pdefault = “Наберите ‘y’ (YES), или ‘n’ (NO)”; static char *error = “Неопределённый ответ”; int yesno (char *prompt) { char buf [ANSWSZ], *p_use, *p; /* Выводит приглашение, если оно не равно NULL