Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Методы get и put




Функции (методы) ввода-вывода

Проверка состояния файла и потока

Открытие файла и связанного с ним потока может оказаться не успешным, например, из-за отсутствия указанного файла или невозможности его создания. Существует несколько методов, позволяющих проверить состояние файла и потока.

Успешность выполнения открытия потока можно проверить с помощью метода is_open, определенного в классах ifstream, ofstream, fstream. Его прототип:

bool is_open (); // true – поток связан с открытым файлом, false - нет

Проверка правильности открытия файла для входного файлового потока f1:

if (!f1.is_open())

cout << "Input file can't be opened.\n";

При неуспешном открытии файла связанному с ним потоку присваивается нулевое значение, поэтому эта же проверка может быть записана и так:

if (!f1)

cout << "Input file can't be opened.\n";

Определить, достигнут ли конец входного файла, можно при помощи метода eof, являющегося методом класса ios, а, следовательно, и методом класса ifstream. Его прототип:

bool eof(); // true – конец файла достигнут, false - нет

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

Кроме переопределенных операций << и >>, классы istream и ostream, содержат несколько специальных методов для ввода-вывода информации. Поскольку классы файлового ввода-вывода являются "потомками" этих классов, данные методы применимы как для стандартных, так и для файловых потоков.

Для посимвольного (побайтового) ввода предназначен метод get, его наиболее часто используемая форма:

istream& get (char& ch);

Для посимвольного (побайтового) вывода предназначен метод put:

ostream& put (char ch);

Метод get, имеющий один параметр, читает один символ (байт) из входного потока в переменную ch. При выполнении этих методов символы-разделители (пробелы, табуляции, переход на новую строку) не пропускаются, а читаются так же, как и другие символы потока.

Метод put, имеющий один параметр, выводит в выходной поток один символ (байт) – значение переменной ch.

ofstream f6("d:\\test.txt");

char c1;

сin.get(c1); // чтение символа с клавиатуры в переменную c1

f6.put(c1); // вывод значения символьной переменной c1 в выходной поток f6

Есть еще несколько форм метода get, например:

istream& get (char *buf, streamsize num);

istream& get (char *buf, streamsize num, char delim);

int get();

где streamsize – разновидность типа int. Первые две из этих форм get позволяют читать из входного потока в область ввода, адресуемую указателем buf, несколько (до num-1 или до конца файла) символов за одно обращение. Окончание ввода вызывает также обнаружение символа перехода на новую строку (кода клавиши "Enter") – для первой формы, и символа delim – для второй. Эти символы из входного потока не извлекаются, они остаются в потоке до выполнения следующей операции ввода. После прочитанных в область ввода buf символов первая и вторая формы метода get записывают завершающий строку нулевой символ.

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

Отметим, что в отличие от ввода символов с помощью операции >>, при использовании метода get пробельные символы воспринимаются как обычные символы, а не как разделители.




Поделиться с друзьями:


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


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



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




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