Шрифт:
Если вы наберете на клавиатуре строку
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;
cin >> name; // оператор >> считывает строку в переменную name
int c2 = count+2; // оператор + складывает целые числа
string s2 = name + " Jr. "; // оператор + добавляет символы
int c3 = count–2; // оператор – вычитает целые числа
string s3 = name – "Jr. "; // ошибка: оператор – для строк не определен