Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЗФ_ОАиП / Лекции ГГУ Скорины - Программирование.doc
Скачиваний:
179
Добавлен:
21.03.2016
Размер:
2.27 Mб
Скачать

28.4. Ввод/вывод символов

Функция fputc() выводит один символ в файл, который с помощью функции fopen() открыт в режиме записи. Прототип функции:

int fputc(int ch, FILE *fp);

где fp – это указатель файла, в который надо вывести символ, a ch – выводимый символ (в файл выводится только младший байт).

Если функция выполнилась успешно, то возвращается записанный символ. В противном случае возвращается EOF.

Функция fgetc() вводит один символ из файла, который с помощью fopen() открыт в режиме чтения. Прототип функции:

int fgetc(FILE *fp);

где fp – это указатель файла, из которого надо ввести символ.

Функция возвращает целое значение, в котором введенный символ находится в младшем байте (старший байт/байты будет нулевыми).

При достижении конца файла функция fgetc() возвращает EOF. Однако fgetc() возвращает EOF и в случае ошибки. Для определения того, что же на самом деле произошло, можно использовать функцию ferror().

Задача. Ввести символы из одного файла и вывести в другой файл.

void main() {

FILE *fin, *fout;

int ch;

if ((fin=fopen("in","r")) == NULL) {

printf("Ошибка открытия входного файла\n"); return;

}

if ((fout=fopen("out","w")) == NULL) {

printf("Ошибка открытия выходного файла\n"); return;

}

ch = fgetc(fin); //

while (ch != EOF) { // while ((ch=fetc(in)) != EOF)

fputc(ch, fout); // fputc(ch, fout);

ch = fgetc(fin); //

} //

fclose(fin);

fclose(fout);

printf("Работа программы завершена успешно\n");

}

28.5. Ввод/вывод строк

Функции fgets() и fputs() вводят строки символов из файла и выводят строки символов в файл. Прототипы функций:

int fputs(const char *str, FILE *fp);

char *fgets(char *str, int N, FILE *fp);

Функция fputs() выводит в файл строку, на которую указывает str. Вывод строки выполняется до нуль-символа. Функция не добавляет в файл при выводе автоматически символ новой строки ‘\n’ и не выводит нулевой байт. В случае успеха возвращает последний записанный символ, в случае ошибки возвращает EOF.

Функция fgets() вводит из файла строку, и делает это до тех пор, пока не будет прочитан символ новой строки или количество прочитанных символов не станет равным N-1. Если был прочитан символ ‘\n’, он записывается в строку (этим функция fgets() отличается от функции gets()). В конец введенной строки всегда автоматически добавляется нулевой байт конца строки. В случае успеха функция возвращает указатель на прочитанную строку, в случае ошибки или конца файла – NULL.

Задача. Ввести строки символов из одного файла и вывести их в другой файл и на экран.

void main() {

char s[100];

FILE *fin, *fout;

int ch;

if ((fin=fopen("in","r")) == NULL) {

printf("Ошибка открытия входного файла\n"); return;

}

if ((fout=fopen("out","w")) == NULL) {

printf("Ошибка открытия выходного файла\n"); return;

}

while (fgets(s,100,fin) != NULL) {

// fputs(s,fout); // файл out == in

int len = strlen(s);

if (s[len-1] == '\n') // убираем из строки символ ‘\n’

s[len-1] = 0;

puts(s);

fputs(s,fout);

}

fclose(fin);

fclose(fout);

printf("Работа программы завершена успешно\n");

}

Структура исходного файла “in”:

1 // 31 0D 0A => “1\n”

22 // 32 32 0D 0A => “22\n”

333 // 33 33 33 0D 0A => “333\n”

4444 // 34 34 34 34 0D 0A => “4444\n”

55555 // 35 35 35 35 35 0D 0A => “55555\n”

Структура полученного файла “out”:

122333444455555 // 31 32 32 33 33 33 34 34 34 34 35 35 35 35 35

Если ввод выполнять так – fgets(s,5,fin), будут введены строки:

“1\n” “22\n” “333\n” “4444” “\n” “5555” “5\n”