Чтение онлайн

на главную - закладки

Жанры

Освой самостоятельно С++ за 21 день.

Либерти Джесс

Шрифт:

25: cout << "Long:\t" << myLong << endl;

26: cout << "Double:\t" << myDouble << endl;

27: cout << "Float:\t" << myFloat << endl;

28: cout << "Unsigned:\t" <<myUnsigned << endl;

29: return 0;

30: }

Результат:

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, e, s, s, e и \0. Последним будет концевой нулевой символ, так как cin автоматически вставляет его. Поэтому при определении размера буфера нужно позаботиться о том, чтобы он был достаточно большим и мог вместить все символы строки, включая концевой нулевой символ. Более подробно о поддержке концевого нулевого символа стандартными библиотечными строковыми функциями речь пойдет на занятии 21.

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

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

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

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

2:

3: #include <iostream.h>

4:

5: int main

6: {

7: char YourName[50];

8: cout << "Your first name: ";

9: cin >> YourName;

10: cout << "Here it is: " << YourName << endl;

11: cout << "Your entire name: ";

12: cin >> YourName;

13: cout << "Here it is: " << YourName << endl;

14: return 0;

15: }

Результат:

Your first name: Jesse

Here it is: Jesse

Your entire name: Jesse Liberty

Here it is: Jesse

Анализ:

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

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

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

Листинг 16.3. Ввод строки значений

1: //Листинг 16.3. Ввод строки значений с помощью cin

2:

3: #include <iostream.h>

4:

5: int main

6: {

7: int myInt;

8: long myLong;

9: double myDouble;

10: float myFloat;

11: unsigned int myUnsigned;

12: char myWord[50];

13:

14: cout << "int: ";

15: cin >> myInt;

16: cout << "Long: ";

17: cin >> myLong;

18: cout << "Double: ";

19: cin >> myDouble;

20: cout << "Float: ";

21: cin >> myFloat;

22: cout << "Word: ";

23: cin >> myWord;

24: cout << "Unsigned: ";

25: cin >> myUnsigned;

26:

27: cout << "\n\nInt:\t" << myInt << endl;

28: cout << "Long:\t" << myLong << endl;

29: cout << "Double:\t" << myDouble << endl;

30: cout << "Float:\t" << myFloat << endl;

31: cout << "Word: \t" << myWord << endl;

32: cout << "Unsigned:\t" << myUnsigned << endl;

33:

34: cout << "\n\nInt, Long, Double, Float, Word, Unsigned: ";

35: cin >> myInt >> myLong >> myDouble;

36: cin >> myFloat >> myWord >> myUnsigned;

37: cout << "\n\nInt:\t" << myInt << endl;

38: cout << "Long:\t" << myLong << endl;

39: cout << "Double:\t" << myDouble << endl;

40: cout << "Float:\t" << myFloat << endl;

41: cout << "Word: \t" << myWord << endl;

42: cout << "Unsigned:\t" << myUnsigned << endl;

43:

Поделиться:
Популярные книги

Прометей: Неандерталец

Рави Ивар
4. Прометей
Фантастика:
героическая фантастика
альтернативная история
7.88
рейтинг книги
Прометей: Неандерталец

Метаморфозы Катрин

Ром Полина
Фантастика:
фэнтези
8.26
рейтинг книги
Метаморфозы Катрин

Позывной "Князь"

Котляров Лев
1. Князь Эгерман
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Позывной Князь

Дворянская кровь

Седой Василий
1. Дворянская кровь
Фантастика:
попаданцы
альтернативная история
7.00
рейтинг книги
Дворянская кровь

Кто ты, моя королева

Островская Ольга
Любовные романы:
любовно-фантастические романы
7.67
рейтинг книги
Кто ты, моя королева

Начальник милиции. Книга 6

Дамиров Рафаэль
6. Начальник милиции
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Начальник милиции. Книга 6

Измена. Свадьба дракона

Белова Екатерина
Любовные романы:
любовно-фантастические романы
эро литература
5.00
рейтинг книги
Измена. Свадьба дракона

Черный Маг Императора 10

Герда Александр
10. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Черный Маг Императора 10

Темный Лекарь 2

Токсик Саша
2. Темный Лекарь
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Темный Лекарь 2

Чехов

Гоблин (MeXXanik)
1. Адвокат Чехов
Фантастика:
фэнтези
боевая фантастика
альтернативная история
5.00
рейтинг книги
Чехов

Ваше Сиятельство 3

Моури Эрли
3. Ваше Сиятельство
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Ваше Сиятельство 3

Сумеречный Стрелок 5

Карелин Сергей Витальевич
5. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сумеречный Стрелок 5

Скандальная свадьба

Данич Дина
1. Такие разные свадьбы
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Скандальная свадьба

Студиозус

Шмаков Алексей Семенович
3. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Студиозус