Выводить текст в консоль из кода программы довольно просто, а как его ввести с клавиатуры, а потом отобразить в консоли?
Вот именно для этого и предназначена функция cin. Эта функция находится в библиотеке ввода-вывода iostream, о которой я в вкратце уже рассказывал в здесь.
Я модифицировал программу следующим образом:
На 8-й строке я объявил переменную s символьного типа.
Переменная – это выделенная область в памяти для хранения каких-либо данных. В данном случае в переменной s будут храниться не только цифровые значения, но и тактовые.
В 10-й строке в консоль выводится приглашение о вводе текста, в 11-й программа ждет, когда будет что-то введено с клавиатуры, после нажатия на клавишу enter все введенное будет передано в переменную s. В 12-й строке сначала будет выведена надпись "Веден текст: " а затем содержимое переменной s. Попробуем запустить программу и набрать «Привет, Мир!»
Что это? Что за знак вопроса? Где все остальное? Именно такой была моя реакция после запуска этой программы. Согласитесь, ведь интересно узнать почему так происходит.
Моя ошибка состояла в неправильном объявлении переменной s. Char – это символьный тип данных и занимает 1 байт. При таком объявлении строку в неё явно не передать. Что делать? Оказывается кроме переменных строго определенного размера есть ещё массивы, в которых можно хранить гораздо больше информации. Попробуем исправить эту ошибку. В 8-й строке после s в квадратных скобках поставим число 100 и запустим программу. Число 100 означает, что вместо переменной будет создан массив s из ста элементов. Поправте если не так.
Символов стало больше, но почему они все не по-русски написаны?
Поискав информацию в сети, я узнал о том, что setlocale() не работает с потоками ввода/вывода, а то есть с cin и cout,. Выходит, что нужно искать альтернативные способы решения данной проблемы.
По-другому решить проблему можно воспользовавшись функциями SetConsoleCP() и SetConsoleOutputCP() с аргументом 1251 в обеих. Эти функции требуют подключения заголовка <Windows.h>. Теперь программа выглядит так:
После компиляции и запуска русские буквы стали отображаться корректно, но почему-то выводится только одно слово:
После чтения документации выяснилось, что по умолчанию потоковый ввод cin вводит строку до пробела, символа табуляции или перевода строки. Для ввода текста до символа перевода строки необходимо использовать манипулятор потока getline():
Запускаем:
На сегодня все. Завтра продолжу изучение языка C++.
Программирование для меня — это хобби. Написание программ – это отличная практика для развития мышления! Если вы считаете так же тогда ставьте лайк и подписывайтесь на мой блог!