Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
раздел 1-все.doc
Скачиваний:
1
Добавлен:
13.09.2019
Размер:
453.63 Кб
Скачать

Чтение файла при помощи fgetc. Функция fgetc применяется для чтения символа из потока.

int fgetc(FILE *fp);

В случае успеха, fgetc возвращает следующий байт или символ из потока (зависит от того, файл "двоичный" или "текстовый"). В противном случае, fgetc возвращает EOF. (Отдельный тип ошибок можно определить вызовом ferror или feof с указателем на файл.)

Чтение файла при помощи fgets

Функция fgets применяется для чтения строки из потока. Считывание происходит до тех пор пока не будет достигнут конец строки (hex:0D0A, эквивалентны в листингах \n) или длина строки n, в которую происходит считывание.

char *fgets(char *string, int n, FILE *fp);

Функция fgets возвращает указатель на строку string. В случае ошибки или конца файла возвращается значение NULL. Для определения того, что произошло - ошибка или конец файла, используются функции feof и ferror.

Чтение файла при помощи fread

int fread (char *buffer, int size, int count, FILE *fp);

Данная функция читает объекты размера size по счетчику count из входного потока fp и располагает их в буфере buffer. fread возвращает число действительно прочитанных объектов, которое меньше, чем count, если при чтении возникла ошибка или встретился конец файла.

Запись в файл при помощи fwrite

fwrite определяется как

int fwrite ( const char * array, size_t size, size_t count, FILE * stream );

Функция fwrite записывает блок данных в поток. Таким образом запишется массив элементов count в текущую позицию в потоке. Для каждого элемента запишется size байт. Индикатор позиции в потоке изменится на число байт, записанных успешно. Возвращаемое значение будет равно count в случае успешного завершения записи. В случае ошибки возвращаемое значение будет меньше count.

Запись в поток при помощи fputc

Функция fputc применяется для записи символа в поток.

int fputc(int c, FILE *fp);

Параметр c "тихо" конвертируется в unsigned char перед выводом. Если прошло успешно, то fputc возвращает записанный символ. Если ошибка, то fputc возвращает EOF.

Запись в поток при помощи fputs

int fputs (char *string, FILE *fp);

Функция fputs копирует строку в конец потока fp. Нулевой символ окончания '\0' не копируется. Возвращает последний записанный символ. Если вводимая строка string пустая, возвращается значение 0. Значение EOF свидетельствует об ошибке.

Форматный ввод из файла fscanf

int fscanf(FILE *fp, char *format[,arguments]);

Возвращает количество успешно проведенных преобразований. Процесс заканчивается при встрече первой неподходящей литеры или признака конца файла (EOF). Ноль на выходе означает, что не обработано ни одного поля. (format описан ниже =>)

fscanf("%i %i",&x1,&x2);

Форматный вывод в файл fprintf

int fprintf(FILE *fp, char *format[,arguments]);

Функция fprintf форматирует и печатает в выходной поток наборы символов и значений. Каждый аргумент (если он есть) преобразуется и выводится согласно заданной спецификации формата в строке формата. Строка формата (format) обладает той же формой и функцией, что и аргумент строки формата функции printf.

fprintf("Вывод = %d,%f\n",i,r);

=> Элемент формата(format) представляет собой последовательность :

% [ - ] [ длина поля ] [ . точность ] [ l ] спецификация типа

“ - “ означает сдвиг выводимых данных к левому краю поля ( по умолчанию данные сдвигаются вправо); длина поля - количество позиций для вывода; точность - количество дробных цифр для чисел или количество выводимых символов строки для строк; “ . ” - разделитель; l - означает, что число должно рассматриваться как long или double. Могут использоваться следующие спецификации типов :

d,i - для данных типа int;

u - для данных типа unsigned;

o - для данных типа unsigned (выводятся в восьмеричном виде);

x,X - для данных типа unsigned (выводятся в шестнадцатеричном виде), шестнадцатеричные цифры A,B,C,D,E,F изображаются большими буквами при использовании типа X и малыми буквами при использовании x;

c - для данных типа char, unsigned char (выводятся в символьном виде);

f - для данных типа float,double (выводятся в виде с фиксированной точкой, по умолчанию выводится 6 дробных цифр);

e,E - для данных типа float,double (выводятся в виде с плавающей точкой, по умолчанию выводится 7 цифр мантиссы и две цифры порядка, всего 13 позиций), отличаются изображением буквы E;

g,G - для данных типа float,double - величины 0.0001<|x|<1000000 выводятся в виде с фиксированной точкой с шестью значащими цифрами, другие величины выводятся с плавающей точкой с шестью значащими

цифрами (всего занимают 12 позиций), спецификации g и G различаются только изображением буквы e(E);

s - для строк;

p - для данных типа указатель.

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

Пример:

#include <stdio.h>

int main (){

FILE *file;

char *fname = "file.txt";

file = fopen(fname,"r");

if(file == 0){ //проверка на успешное открытие файла

printf("не могу открыть файл '%s'",fname);

return 0;

}

char ch;

while((ch = fgetc(file))!=EOF) //читать пока не конец файла

fputc(ch, stdout); //вывод на экран(stdout-поток стандартного вывода, в нашем случае окно консоли)

fclose(file);

return 0;

}