Программирование >>  Дополнительные возможности наследования 

1 ... 161 162 163 [ 164 ] 165 166 167 ... 265


Под переадресацией понимают пересылку выводимых данных в устройство, либо считывание данных с устройства, отличное от установленного по умолчанию. В операционных системах DOS и UNIX используются специальные операторы переадресации ввода (<) и вывода (>).

Пайпингом называется использование вывода одной программы в качестве ввода для другой.

Операционная система DOS содержит ограниченный набор команд переадресации для вывода (>) и ввода (<). Команды переадресации системы UNIX более разнообразны, однако основная идея остается той же: данные выводятся на экран, записываются в файл или передаются другой профамме. Ввод в профамму осуществляется из файлов или с клавиатуры.

В целом переадресация больше относится к функциям операционной системы, а не библиотек iosream. Язык С++ предоставляет доступ к четырем стандартным устройствам и необходимый набор команд для переадресации устройств ввода-вывода.

Вывод данных с помощью cin

Глобальный объект cin отвечает за ввод данных и становится доступным при включении в профамму класса iostream. В предьщущих примерах используется перефуженный оператор ввода ( ) для присвоения вводимых данных переменным профаммы. Для ввода данных используется следующий синтаксис:

int SomeVariable;

cout Enter a number: ;

cin >> SomeVariable;

Другой глобальный объект, cout, и его использование для вывода данных обсуждается несколько ниже. Сейчас же остановимся на третьей строке: cin someVariable;. Что же представляет собой объект cin?

На глобальность этого объекта указывает тот факт, что его не нужно объявлять в коде профаммы. Объект cin включает перефуженный оператор ввода ( ), который записывает данные, хранимые в буфере cin, в локальную переменную someVariable. Причем оператор ввода перефужен таким образом, что подходит для ввода данных всех базовых типов, включая int&, shorts, long&, doubles, floats, char&, char* и т.п. Когда компилятор всфечает выражение cin someVariable, то вызывается вариант оператора ввода, соответствующий типу переменной someVariable, В приведенным выше примере someVariable имеет тип int, поэтому вызывается следующий вариант перефуженной функции:

istream & operator>> (int&)

Обратите внимание, поскольку параметр передается как ссылка, оператор ввода может изменять исходную переменную. Использование cin показано в листинге 16.1.

Аисшииг 16.1. НспоАьзоваипе clu ддя ввода даииых разных типов

Листинг 16.1. Ввод даннах с помощью cin

Sinclude <iostream.h>

int main() {

int mylnt;



8: long myLong;

9: double myDouble;

float myFloat; unsigned int myllnsigned;

cout int: ; cin >> mylnt; cout Long: ; cin myLong; cout Double: ; cin >> myDouble; cout << Float: ; cin myFloat; cout Unsigned: ; cin myUnsigned;

cout \ n\ nlnt:\ t mylnt endl; cout Long:\ t myLong endl; cout Double:\ t << myDouble << endl; cout Float:\ t << myFloat endl; cout Unsigned:\ t myUnsigned endl; return 0;

* : int: 2

Long: 70000 Double: 987654321 Float: 3.33 Unsigned: 25

Int: 2 Long: 70000 Double: 9.87654e+08 Float: 3.33 Unsigned: 25

В строках 7-11 объявляются переменные разных типов. В строках 13-22 пользователю предлагается ввести значения для этих переменных, после

чего результаты выводятся в строках 24-28 (с помошью cin).

Выводимая программой информация говорит о том, что переменные записываются

и выводятся в соответствии с их типом.

Строки

Объект cin также может принимать в качестве аргумента указатель на строку символов (char*), что позволяет создавать буфер символов и заполнять его с помошью cin. Например, можно написать следующее;

char YourName[50]

cout << Enter your name: ;

cin YourName;



Если ввести имя Jesse, переменная YourName заполнится символами J, е, s, s, е и \0. Последним будет концевой нулевой символ, так как cin автоматически вставляет его. Поэтому при определении размера буфера нужно позаботиться о том, чтобы он был достаточно большим и мог вместить все символы строки, включая концевой нулевой символ. Более подробно о поддержке концевого нулевого символа стандартными библиотечными строковыми функциями речь пойдет на занятии 21.

ПроОлемы, возникающие ори ввода строк

Успешно выполнив все описанные ранее операции с объектом cin, вы будете неприятно удивлены, если попытаетесь ввести в строке полное имя. Дело в том, что cm рассматривает пробел как заданный по умолчанию разделитель строк. После того как в строке обнаруживается пробел, ввод строки завершается добавлением концевого нулевого символа. Эта проблема показана в листинге 16.2.

Аисшинг 16.2. Попытка вппда Опдгг пднпгп скппа с ппмпщьм cin

2 3 4 5 6 7 8 9

10 11 12 13 14 15

Листинг 16.2. Проблемы с вводом строки с помощью cin

Sinclude <iostream.h>

int mainO {

char YourName[50]:

cout << Your first name: ;

cin >> YourName;

cout Here it is: << YourName endl; cout Your entire name: ; cin YourName;

cout Here it is: YourName endl; return 0;

Your first name: Jesse

Here it is: Jesse

Your entire name; Jesse Liberty

Here it is: Jesse .

Строкой 7 для хранения вводимой пользователем строки создается массив символов. В строке 8 пользователю предлагается ввести имя, и, как видно из вывода, это имя сохраняется правильно.

В строке 11 пользователю предлагается ввести не только имя, но и фамилию. Ввод осушествляется только до тех пор, пока cin не обнаружит пробел между именем и фамилией. После этого ввод строки прекрашается и оставшаяся информация теряется. Это не совсем то, что было нужно.

Чтобы понять, почему cin работает именно так, проанализируйте листинг 16.3, в котором показан пример ввода строки значений.



1 ... 161 162 163 [ 164 ] 165 166 167 ... 265

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика