int age; // переменная типа integer
cin >> first_name; // считываем значение типа string
cin >> age; // считываем значение типа integer
cout << "Hello, " << first_name << " (age " << age << ")\n";
}
Итак, если вы наберете на клавиатуре Carlos 22
, то оператор >>
считает значение Carlos
в переменную first_name
число 22
— в переменную age и выведет на экран следующий результат.
Hello, Carlos (age 22)
Почему вся строка Carlos 22
не была введена в переменную first_name
? Потому что по умолчанию считывание строк прекращается, как только будет обнаружен так называемый >>
. Например, перед считываемым числом можно поместить сколько угодно пробелов; оператор >>
пропустит их и считает число.
Если вы наберете на клавиатуре строку 22 Carlos
, то увидите нечто неожиданное. Число 22
будет считано в переменную first_name
, так как, в конце концов, 22
— это тоже последовательность символов. С другой стороны, строка Carlos
не является целым числом, поэтому она не будет считана. В результате на экран будет выведено число 22
, за которым будет следовать строковый литерал " (age
" и какое-то случайное число, например –96739
или 0
. Почему? Потому что вы не указали начальное значение переменной age
и впоследствии в нее ничего не записали. В итоге получили какое-то “мусорное значение”, хранившееся в участке памяти в момент запуска программы. В разделе 10.6 мы покажем способ исправления ошибок, связанных с форматом ввода. А пока просто инициализируем переменную age
так, чтобы она имела определенное значение и ввод осуществлялся успешно.
// ввод имени и возраста (2-я версия)
int main()
{
cout << "Пожалуйста, введите свое имя и возраст \n";
string first_name = "???"; // переменная типа string
// ("???" означает, что "имя неизвестно")
int age = –1; // переменная типа int (–1 означает
// "возраст неизвестен")
cin >> first_name >> age; // считываем строку, а затем целое число
cout << "Hello, " << first_name << " (age " << age << ")\n";
}
Теперь ввод строки 22 Carlos
приводит к следующему результату:
Hello, 22 (age –1)
Обратите внимание на то, что мы можем одним оператором ввода ввести одновременно несколько значений, а одним оператором вывода — вывести их на экран. Кроме того, оператор <<
, как и оператор >>
, чувствителен к типу, поэтому можем вывести переменную age
типа int
вместе со строковой переменной first_name
и строковыми литералами "Hello,
", " (age
" и "\n
" .
Ввод объекта типа string
с помощью оператора >>
(по умолчанию) прекращается, когда обнаруживается разделитель; иначе говоря, оператор >>
считывает отдельные слова. Однако иногда нам необходимо прочитать несколько слов. Для этого существует много возможностей. Например, можно прочитать имя, состоящее из двух слов.
int main()
{
cout << "Пожалуйста, введите свое имя и отчество\n";
string first;
string second;
cin >> first >> second; // считываем две строки
cout << "Hello, " << first << ' ' << second << '\n';
}
Здесь мы просто использовали оператор >>
дважды, применив его к каждому из слов. Если требуется вывести эти слова на экран, то между ними следует вставить пробел.
ПОПРОБУЙТЕ
Запустите программу “имя и возраст”. Измените ее так, чтобы она выводила возраст, измеренный месяцами: введите возраст, выраженный в годах, и умножьте это число на 12 (используя оператор *
). Запишите возраст в переменную типа double
, чтобы дети могли гордиться, что им пять с половиной, а не пять лет.
3.4. Операции и операторы
Кроме значений, которые могут храниться в переменной, ее тип определяет также операции, которые можно применять к ней, и их смысл. Рассмотрим пример.
int count;
cin >> count; // оператор >> считывает целое число в объект count
string name;