Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2009 лекции ПЯВУ часть1.doc
Скачиваний:
23
Добавлен:
27.03.2015
Размер:
823.3 Кб
Скачать

Чтение из файла символа или строки символов

На рис. 8.1. представлена программа, выводящая на экран содержимое текстового файла

#include <stdio.h>

#include <conio.h>

void main(void)

{

FILE *stream;

char ch;

// открыть файл для его чтения

stream = fopen("proba.txt","r");

if(!stream)

return;//если файл не удалось открыть, завершаем программу

do

{

// прочитать символ из файла

ch = fgetc(stream);

// вывести символ на экран

putch(ch);

}

while(ch!=EOF);

fclose(stream);

}

Рис. 8.1. Программа выводит на экран содержимое текстового файла посимвольно

#include <stdio.h>

void main()

{

FILE *stream;

char msg[20];

// открыть файл для чтения

stream = fopen("test.txt","r");

// получить строку из файла

fgets(msg,strlen(string)+1,stream);

// напечатать строку */

printf("%s",msg);

fclose(stream);

}

Рис. 8.2. Программа выводит на экран содержимое текстового файла построчно

fgetsсчитывает из потокаstreamстроку символов и помещает ее вs. Ввод завершается после вводаn-1символа или при вводе символа перехода на следующую строку, смотря что произойдет раньше. В отличие отgets,fgetsпрекращает ввод строки при получении символа перехода на следующую строку. Нулевой байт добавляется в конец строки для определения ее конца (см. рис. 8.2).

Запись символа или строки символов в файл

Для записи символа в файл необходимо указать сам символ, а также указатель на открытый для записи файл (рис. 8.3.).

void main()

{

FILE *stream;

stream = fopen("test.txt","w+");

char msg[] = "Здравствуй мир";

int i=0;

while(msg[i])

{

fputc(msg[i],stream); //запись в файл stream

i++;

}

fclose(stream);

}

Рис. 8.3. Программа записывает построчно в файл

Функция fputsкопирует строку, ограниченную нулевым байтом в потокstream. Она не добавляет в конец строки символ перехода на новую строку и не выводит нулевой символ.

void main()

{

FILE *stream;

stream = fopen("test.txt","w+");

char msg[] = "Здравствуй мир";

fputs(msg,stream); //запись в файл stream

fclose(stream);

}

Рис. 8.4. Программа записывает строку в файл

Смещение внутри файла

int fseek(FILE * stream, long offset, int fromwhere);

Функция fseekустанавливает адресный указатель файла, соответствующий потокуstream, в новую позицию, которая расположена по смещениюoffsetотносительно места в файле, определяемого параметромfromwhere. Параметрfromwhereможет иметь одно из трех значений 0, 1 или 2, которые представлены тремя символическими константами (определенными в файлеstdio.h), следующим образом:

Таблица 5

Значения параметра fromwhereфункцииfseek

Параметр

Размещение в файле frowmwhere

SEEK_SET (0)

начало файла

SEEK_CUR (1)

позиция текущего указателя файла

SEEK_END (2)

конец файла (EOF)

Функция fseekиспользуется с операциями ввода/вывода в поток (рис. 8.5.).

#include <stdio.h>

void main(void) {

FILE *stream;

char string[] = "Тестовый пример";

char msg[20];

/* создать файл для его изменения */

stream = fopen("proba.txt","w+");

/* записать в файл данные */

fputs(string,stream);

/* перейти в начало файла */

fseek(stream,0,SEEK_SET);

/* ввести строку из файла */

fgets(msg,strlen(string)+1,stream);

/* напечатать строку */

printf("%s",msg);

fclose(stream);

}

Рис. 8.5. Программа, иллюстрирующая работу функции fseek