Функции для ввода-вывода по строкам 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Функции для ввода-вывода по строкам



Чтение строки из потока

 

Чтение по строкам осуществляет функция fgets()

Прототип:

char * fgets(char *_s, int _size, FILE *_fp);

 

Описание:

fgets() считывает из потока _fp строку символов и помещает ее в _s. Ввод завершается после считывания _size-1 символов или при вводе символа перехода на следующую строку, смотря, что произойдет раньше. fgets() прекращает ввод строки при получении символа перехода на следующую строку. Нулевой байт добавляется в конец строки для индикации ее конца. Символ конца строки не отбрасывается и располагается непосредственно перед нуль-символом.

 

Возвращаемое значение:

При успешном завершении возвращает указатель на _s, при ошибке или конце файла возвращает указатель NULL.

 

 

Для ввода строки со стандартного вводного потока (с клавиатуры) используется функция gets().

 

Прототип:

char * gets(char *_s);

 

Описание:

Функция gets() читает строку символов, оканчивающуюся символом перевода строки, в переменную *_s из стандартного входного потока stdin. Данная символьная строка оканчивается символом перехода на новую строку, который при записи в *_s заменяется на нулевое окончание (\0).

В отличие от scanf(), gets() позволяет вводить строки, содержащие символы пробела и табуляции. Все, что было введено до перевода каретки, помещается в _s.

 

Возвращаемое значение:

При успешном завершении, функция gets() возвращает строку _s; при достижении конца файла (EOF) или ошибке возвращается NULL.

 

Пример:

#include <stdio.h>

 

int main(void)

{

char string[133];

printf("Введите строку:");

gets(string);

printf("Cтрока = '%s'\n,string);

}

 

Запись строки в поток

 

Запись в поток по строкам осуществляет функция fputs()

Прототип:

int fputs(char *_s, FILE *_fp);

 

Описание:

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

 

Возвращаемое значение:

При успешном завершении fputs() возвращает последний выведенный символ. В противном случае возвращает EOF.

Пример:

#include<stdio.h>

 

int main(void)

{

/* вывести строку в поток */

fputs("Тестовый пример",stdout);

return 0;

}

 

Для вывода строки в стандартный выводной поток (на экран) используется функция puts().

Прототип:

int puts(char *_s);

 

Описание:

Функция puts() копирует строку символов с нулевым окончанием в стандартный выходной поток stdout, причем добавляет в конец символ перехода на новую строку.

 

Возвращаемое значение:

При успешном завершении, функция puts() возвращает ненулевое значение. В противном случае возвращается EOF.

Пример:

#include<stdio.h>

 

int main(void)

{

/* вывести строку в поток */

puts("Тестовый пример");

return 0;

}

 

 

Задача 164. Программа создает программным путем (по строкам) текстовый файл на диске. Ввод строк с клавиатуры осуществляет функция fgets(), вывод на диск построчно – функция fputs().

 

// fget_fput3_rus.cpp: 14.05.2012г

// Ввод строк с клавиатуры(fgets) и создание текстового файла(fputs)

// Использование fgets и fputs для обычного в/ы (stdin / stdout)

 

 

#include<conio.h>

#include<stdio.h>

#include <stdlib.h>

#include <iostream>

using namespace std;

 

const int size=120;

 

int main()

{

char line[size]; char nameout[15]; FILE *out;

 

system("chcp 1251"); //переключаем консоль в кодировку win1251

// ОБЯЗАТЕЛЬНО ПЕРЕКЛЮЧИТЬ ШРИФТЫ С ТОЧЕЧНЫХ НА Lucida console

// после запуска программы щелчком мыши в левом верхнем углу

 

cout<< "Введите имя создаваемого файла,например,D:\omar.txt\n";

gets(nameout);

 

if((out=fopen(nameout, "a+"))==NULL)

{

cout<< " Не могу открыть выводной файл... ";

getch(); exit(1);

}

cout<< "Введите несколько строк текста, потом Ctrl+Z \n";

 

while(fgets(line,size,stdin)!=NULL && line[0]!='\n')

{

fputs(line,out);

fputs(line, stdout); // puts(line);

}

cout<< "Файл создан";

fclose(out); getch(); return 0;

}

 

 

Задача 165. В программе решается следующая задача. На основе файла, созданного предыдущей программой (см.Задачу 164), строится новый файл, в котором каждая строка:

1 вариант) содержит только буквы исходной строки

2 вариант) перевернута по отношению к исходной

#include "stdafx.h"

#include<conio.h>

#include<stdio.h>

#include <iostream>

using namespace std;

// к записи fputs добавляет два символа-\r и \n

// Чтение текстового файла порциями до 255 символов

// Когда fgets встречает символ \n, она его сохранит в строке,

// и вставит после него \0

// или прочтёт size-1 символов или достигнет EOF - она

// добавит '\0'-символ, чтобы сформировать строку

 

const int SIZE=256;

 

void main()

{

FILE *out, *in; char ch, zap1[SIZE],zap2[SIZE];

int i,k;

//char namein[15],nameout[15];

system("chcp 1251");

 

//printf("Введите имя входного файла,например,D:\\eddy.doc\n");

//gets(namein);

in=fopen("D:\\eddy.doc","r");

if(in==NULL)

{puts("Входной файл не открыт"); exit(1);}

//printf("Введите имя выходного файла,например, dima.txt\n");

// gets(nameout);

 

out=fopen("D:\\dima.TXT","w");

if(out==NULL)

{puts("Выходной файл не открыт"); exit(2);}

 

// 1 вариант) содержит только буквы исходной строки

/*

while(fgets(zap1,SIZE,in)!=NULL)

{ i=0; k=0;

while (ch=zap1[i])

{ if (ch>='А' && ch<='Я'||

ch>='а' && ch<='п'||

ch>='р' && ch<='я'||

ch>='a' && ch<='z'||

ch>='A' && ch<='Z'||

ch== ' '|| ch=='\n') // обыграть. Сперва без '\n'

zap2[k++]=ch;

i++;

}

zap2[k]=0;

fputs (zap2, out);

}

*/

//2 вариант) переслать строки из файла в файл с переворотом

 

while(fgets(zap1,SIZE,in)!=NULL)

{ i=0;

while (zap1[i])

i++;

k=0;

while (--i >=0)

{ zap2[k++]=zap1[i];}

 

zap2[k]=0;

fputs (zap2, out);

}

puts("Файл скопирован");

fclose(out); fclose(in);

 

}

 



Поделиться:


Последнее изменение этой страницы: 2016-12-16; просмотров: 328; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.191.157.186 (0.02 с.)