Использование функции gef() без параметров



 

Сначала рассмотрим использование функции get() без параметров. В этом случае функция возвращает значение найденного символа или EOF (end of file — конец файла) при достижении конца файла. Функция get () без параметров используется редко. Так, cin.get() нельзя использовать для последовательной инициализации ряда переменных, поскольку возвращаемое функцией значение не является объектом iostream. Именно поэтому следующая запись работать не будет:

cin.get() >>myVarOne >> myVarTwo // ошибка

Запись cin.get() >> myVarOne возвращает значение типа int, а не объект iostream. Пример использования функции get() без параметров показан в листинге 16.4.

Листинг 16.4. Использование функции get() Вез параметров

1: // Листинг 16.4. Использование get() без параметров

2: #include <iostream.h>

3:

4: int main()

5: {

6: char ch;

7: while ( (ch = cin.get()) != EOF)

8: {

9: cout << "ch: " << ch << endl;

10: }

11: cout << "\nDone!\n";

12: return 0;

13: }

 

Примечание: Для выхода из этой программы придется ввести символ конца файла с клавиатуры. С этой целью в операционной системе DOS используется комбинация клавиш <Ctrl+Z>, а в UNIX — <Ctrl+D>.

 

Результат:

Hello

ch H

ch e

ch 1

ch 1

ch о

ch

World

ch W

ch о

ch r

ch 1

ch d

ch

(ctrl-z)

Done!

 

Анализ: В строке 6 объявляется локальная символьная переменная. В цикле while символ, полученный от cin.get(), присваивается ch, и если возвращенный символ не EOF, то он выводится на печать. Цикл завершается вводом EOF, комбинацией клавиш <Ctrl+Z> в DOS или <Ctrl+D> в UNIX.

Следует отметить, что не во всех версиях библиотеки istream поддерживается функция-член get(), хотя сейчас она является частью стандарта ANSI/ISO.

 

Ошибка! Недопустимый объект гиперссылки.get() с параметром

 

При установке в функции get() параметра, указывающего на символьную переменную, этой переменной присваивается очередной символ потока ввода. При этом возвращается объект iostream, что позволяет вводить последовательный ряд значений, как показано в листинге 16.5.

Листинг 16.5. Использование функции get() с параметрами

1: // Листинг 16.5. Использование get() с параметрами

2: #include <iostream.h>

3:

4: int main()

5: {

6: char а, b, с;

7:

8: cout << "Enter three letters: ";

9:

10: cin.get(a).get(b).get(c);

11:

12: cout << "а: " << а << "\nb: " << b << "\nc: " << с << endl;

13: return 0;

14: }

 

Результат:

Enter three letters: one

а: о

b: n

с: e

 

Анализ: В строке 6 объявляются символьные переменные а, b и с. В строке 10 трижды последовательно вызывается функция cin.get(). Сначала вызывается cin.get(a), в результате первый символ буфера ввода заносится в а и возвращается объект cin, после чего происходит вызов cin.get(b), присваивающий очередной символ буфера переменной b. Аналогичным образом вызывается функция cin.get(c), присваивающая следующий символ переменной с.

Поскольку cin.get() возвращает cin, можно было записать это следующим образом:

cin.get(a) >> b;

В этом случае cin.get(a) возвратит cin, поэтому следующее выражение будет иметь вид: cin >> b;.

 

Рекомендуется: Используйте оператор ввода >>, когда необходимо вводить значения, разделенные пробелами в строке. Используйте функцию get() с символьным параметром, если нужно последовательно вводить все символы строки, включая пробелы.

 

 

Ввод строк со стандартного устройства ввода

 

Для заполнения массива символов можно использовать как оператор ввода (>>), так и методы get() и getline().

Еще один вариант перегруженной функции get() принимает три параметра. Первый параметр — это указатель на массив символов, второй указывает максимальное число символов в строке с учетом концевого нулевого символа, добавляемого автоматически, и третий задает разделитель строк.

Если для второго параметра установлено значение 20, функция get() введет 19 символов и оборвет ввод строки, на которую указывал первый параметр, после чего добавит концевой нулевой символ. Третий параметр по умолчанию устанавливается как символ разрыва строки ( \n ). Если этот символ повстречается раньше, чем будет введен последний допустимый символ строки, функция вставит в этом месте концевой нулевой символ, но символ разрыва строки при этом останется в буфере и будет считан очередной функцией ввода.

Реализация этого метода ввода показана в листинге 16.6.


Дата добавления: 2019-02-12; просмотров: 233; Мы поможем в написании вашей работы!

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






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