Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Создание текстового файла по одному символу

Else

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

Для чтения из стандартного потока stdin применяется функция

Символ \n копируется в строку, к концу строки добавляется нулевой байт \0. Возвращает при успехе указатель на str, иначе возвращает NULL. Строка str не изменяется, если ни один символ не прочитан и встретился конец файла.

Достигнут конец файла.

При выводе завершающий нулевой байт строки преобразуется в символ новой строки.

Для записи строки в стандартный выходной поток stdout применяется функция

Работа с файлом

fclose(f);

}

Проверка на конец файла
Каждый поток содержит индикатор конца файла, который хранится в структуре файла и устанавливается в ненулевое значение функцией чтения из файла при достижении конца файла.
Состояние потока определяется функцией:
int feof(FILE* file);
Возвращает 0, если конец файла не достигнут. При достижении конца файла содержимое последней прочитанной порции информации не определено.

Операции ввода-вывода
Ввод-вывод в файл можно осуществлять различными способами, в зависимости от поставленной задачи.

Работа со строками

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

Пишет строку str в поток stream, не включая завершающий нулевой байт. В случае удачи возвращает 0 (или ASCII-код последнего вводимого символа), иначе возвращает EOF.

int puts(char* str);

 

char* fgets(char* str, int size, FILE* stream);

Читает строку из потока stream в строку str, остановится: · прочитан size+1 символ;

· встретился символ новой строки;

 

char* gets(char* str);

 

Пример 18.1. Построчное чтение из текстового файла

void ReadStringFile(FILE *in,char* filename)
{char *str=(char*)malloc (81);
if ((in = fopen(filename,"r"))!= NULL)
{
fgets(str,80,in); // gets(str);
if (feof(in)) printf("Файл пустой\n");
while (!feof(in))
{
fputs(str,stdout);
fgets(str,80,in); // gets(str);
}
fclose(in);
}
else
printf("Файл не открывается\n");
}

 

Пример 18.2. Построчное создание текстового файла
void CreateStringFile(FILE *out,char* filename)
{int k;
char str[80];
out = fopen(filename,"w");
gets(str);
while(!feof(stdin))
{ fputs(str,out);
gets(str);// Не заносит в строку

//символ возврата каретки, Заносит \0
}
fclose(out);

}

 

Пример 18.3. Текстовый файл input.txt содержит строки длиной

не более 100 символов. Найти число строк, начинающихся с пробела.

int main()

{ int N = 0;

FILE* f;

char *S = new char[101];

if ((f = fopen("input.txt", "rt"))!= NULL)

{

while (fgets(S, 101, f)!= NULL)

if (S[0] == ' ') N++;

fclose(f);

cout << N;

}

printf("Файл не открывается\n");

return 0;

}

 

Посимвольный ввод-вывод
int fputc(int c, FILE* stream);
int putc(int c, FILE* stream);
Записывает символ c в поток stream и продвигает индикатор позиции на следующий символ. Перед записью в файл параметр c типа int преобразуется в тип unsigned char. При успехе возвращает c, в случае неудачи EOF (-1).
Функции идентичны, но putc определена обычно как макрос.
int fgetc(FILE* stream);
int getc(FILE* stream);
Работают аналогично fputc, но читают символ. В случае достижения конца файла возвращают EOF и устанавливают индикатор конца файла.
В консольном режиме значению EOF соответствует нажатие клавиш Ctrl+Z.

Функции
int getchar();
int putchar(int ch);
частные случаи функций getc и putc.

void ReadChFile(FILE *in, char* filename)
// Чтение текстового файла посимвольно

{

int ch;
if ((in = fopen(filename, "r"))!= NULL)
{

ch = getc(in);
if(ch == EOF) printf("Файл пустой\n");
while (ch!= EOF)
{

putc(ch,stdout);
ch = getc(in);
}
fclose(in); // закрываем файл
}
else printf (" Файл не открывается\n");
}

void CreateChFile(FILE *out, char* filename)

{

int ch;

out = fopen(filename, "w");

ch=getchar();

while (ch!=EOF)

{

putc(ch,out);

ch=getchar();

}

fclose(out);

}

Форматированный ввод-вывод

int fprintf(FILE* stream,
const char* format,...);

Форматированный вывод в файл stream. Работает аналогично sprintf, в случае удачи возвращает число выводимых символов, иначе возвращает -1.

int printf(const char * формат, …)

 

int fscanf(FILE* stream, const char* format
[ адреса_переменных ],
... );
Форматированный ввод из файла stream, в случае успеха возвращает количество единиц прочитанных данных, иначе возвращает EOF.

int scanf(const char * формат,
[ адреса_переменных ],…)

void CreateFStringFile(FILE *out, char* filename)

<== предыдущая лекция | следующая лекция ==>
Позиционирования файлов | Константа BUFSIZ - стандартный размер в байтах буфера для обмена данными с файлом
Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 256; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.032 сек.