- •Лекция 4
- •Файлы
- •Текстовые и бинарные файлы
- •Вчем отличия?
- •Описание файла
- •Библиотечные функции, используемые при работе с файлами.
- •Функция fopen()
- •Функция freopen()
- •const char* mode
- •Способ использования файла
- •Способ использования файла
- •Функция fclose()
- •Буферизация
- •Функция fflush()
- •Функция fflush()
- •Функция fprintf( )
- •Функция fscanf( )
- •Пример
- •Функция putchar()
- •Функция getchar( )
- •Прописные буквы в строчные:
- •Функции putc( ), fputc()
- •Функция getc( ), fgetc()
- •Функция feof( )
- •Функция puts( )
- •Функция fputs( )
- •Функция gets( )
- •Функция fgets( )
- •Пример
- •EOF ловушка
- •Функция fseek( )
- •Использование fseek( ) для печати содержимого файла
- •Функция ferror( )
- •Функция remove( )
- •Функция rewind( )
- •Функция fread( )
- •Функция fwrite( )
- •Пять стандартных файлов
- •Низкоуровневый ввод/вывод
Прописные буквы в строчные:
#include <stdio.h> int main() {
int c;
while ((c = getchar()) != EOF) putchar(isupper(c) ? tolower(c) : c); return 0;
}
isupper и tolower - макросы, определенные в stdio.h .
isupper проверяет, является ли его аргумент буквой из верхнего регистра, и возвращает ненулевое значение, если это так, и ноль в противном случае.
tolower преобразует букву из верхнего регистра в ту же букву нижнего регистра.
Функции putc( ), fputc()
putc( ) – макрокоманда.
Функция fputc( ) записывает символ в файл. Прототип: int fputc(int с, FILE *fp);
fp - указатель на файл, возвращенный функцией fopen(), с - символ.
При успешном завершении fputc( ) возвращает записанный символ, в противном случае возвращается константа EOF.
int ch; ....
fputc(ch, fo);
Функция getc( ), fgetc()
getc( ) – макрос.
Функция fgetc( ) читает символ из файла. Прототип: int fgetc(FILE *fp);
fp - указатель на файл, возвращенный функцией fopen( ). Эта функция возвращает прочитанный символ. Соответствующее значение имеет тип int, но старший байт равен нулю.
Если достигнут конец файла, то fgetc( ) возвращает значение ЕОF.
int ch; ...
ch=fgetc(fi);
читает символ из файла, на который указывает fi
Функция feof( )
Функция feof( ) определяет конец файла при чтении двоичных данных.
Прототип: int feof(FILE *fp);
fp - указатель на файл, возвращенный функцией fopen( ).
При достижении конца файла возвращается ненулевое значение, в противном случае возвращается 0.
Пример:
while (!feof(f)) fscanf (f, “%d”, &x);
Коварство функции: если в конце последовательности стоит пробел, то конец файла еще не достигнут, то очередное число прочитать невозможно.
Функция puts( )
Функция puts( ) записывает строку в стандартный вывод. Прототип: int puts(const char *string);
Эта функция записывает выбранную строку string в стандартный поток вывода stdout, заменяя в выходном потоке нулевой символ окончания строки символом новой строки (‘\n').
Функция puts возвращает последний записанный символ, которым обычно является символ новой строки ‘\n'. Значение EOF свидетельствует об ошибке.
Например:
#define MESSAGE "Всем привет!"
......
puts(MESSAGE);
Функция fputs( )
Функция fputs( ) записывает строку символов в файл.
Она отличается от функции puts( ) только тем, что в качестве второго параметра должен быть записан указатель на переменную файлового типа. Символ конца строки ('0') не записывается.
Прототип: int fputs(const char *str, FILE *fo); Например:
l = fputs("Ехаmple", fo);
При успешном выполнении функция fputs() возвращает неотрицательное значение (последний записанный символ), а при неудачном — значение EOF.
В отличии от puts функция fputs( ) не добавляет в конец строки символ перехода на новую строку.
Функция gets( )
Функция gets( ) читает строку символов из стандартного ввода и запоминает ее в буфере buffer (см.ниже).
Прототип: char * gets(char *buffer);
При нажатии клавиши Enter для завершения ввода, генерируется символ новой строки (\n). Функция gets() преобразует его в нулевой символ (\0), который служит признаком конца строки.
Пример:
#include
.......
char line[100]; char *result; result = gets(line);
Функция возвращает указатель на строку string при успешном завершении и константу NULL в случае ошибки либо достижения конца файла.
Функция fgets( )
Функция fgets( ) читает строку символов из файла.
Она отличается от функции gets( ) тем, что имеет три параметра, третий - указатель на переменную файлового типа.
Прототип: char *fgets(char *str, int n, FILE *fi)
Строка считывается целиком, если ее длина не превышает указанного числа символов, в противном случае функция считывает только заданное число символов.
Пример:
...
fgets(string, n, fi);
Функция возвращает указатель на строку string при успешном завершении и константу NULL в случае ошибки либо достижения конца файла.
Пример
/* Программа считывает файл строка за строкой */
#include <stdio.h> #define MAX 80 int main( ) {
FILE *f1;
char *string[MAX]; f1=fopen("input.txt","r");
while (fgets(string,MAX,f1) != NULL) puts(string);
return 0;
}
Функция прекращает работу после считывания символа новой строки или после считывания символов общим числом MAX-1, в зависимости от того, что произойдет раньше. В любом случае символ '\0' добавляется в самый конец строки.
Разница между gets( ) и fgets( ) заключается в том, что gets( ) заменяет символ новой строки на '\0', в то время как fgets( ) сохраняет символ новой строки.
EOF ловушка
Распространенная ошибка при использовании getchar, fgetc, getc является присвоение результата переменной типа char.
Следующий фрагмент это демонстрируют:
char c; (int c;)
while (( c = getchar( ))!= EOF ) putchar ( c );