Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Ввод строки
Числа и символы мы вводить научились, теперь попробуем ввести строку:
// #include <process.h>
system("chcp 1251"); // Смена кодировки консоли
std::setlocale(LC_ALL, "Russian_Russia.1251");
char str[255] = {0};
std::cout << "Введите строку: ";
std::cout.flush();
std::cin >> str;
std::cout << '\'' << str << '\'' << std::endl;
Сначала изменяется кодировка консоли и настраивается локаль. Строка, которую мы получим по умолчанию, будет в кодировке консоли (например, в кодировке windows-866 или какой-либо другой). Чтобы получить строку в кодировке windows-1251, мы передаем команду смены кодировки chcp 1251
функции system()
. Чтобы использовать функцию system()
следует подключить заголовочный файл process.h
.
Далее объявляется символьный массив, состоящий из 255
символов. Строки в языке C++ представляют собой последовательность (массив) символов, последним элементом которого является нулевой символ ('\0'
). Обратите внимание на то, что нулевой символ (нулевой байт) не имеет никакого отношения к символу '0'
. Коды этих символов разные. Затем выводится подсказка пользователю и сбрасывается буфер. Далее объекту cin
передается указатель на первый элемент массива str
. Если в окне консоли ввести строку "Hello, world!"
и нажать клавишу <Enter>, то массив str
будет содержать значение "Hello,\0"
. Фрагмент "world!"
останется в буфере, так как символ пробела является символом-разделителем.
Чтобы получить определенное количество символов необходимо воспользоваться методом getline()
объекта cin
. Прототипы метода:
istream &getline(char *str, streamsize count);
istream &getline(char *str, streamsize count, char delim);
В первом параметре задается указатель на строку, а во втором параметре максимальное количество символов. В параметре delim
можно дополнительно указать символ-ограничитель. Метод, соответствующий первому прототипу, производит считывание count-1
символов. Если раньше встретится символ перевода строки (\n
), то считывается фрагмент до этого символа. Символ перевода строки считывается, но не записывается в массив. В конец массива автоматически вставляется нулевой символ. В качестве значения метод возвращает ссылку на поток ввода. Пример использования метода getline()
приведен листинге 2.8.
Метод, соответствующий второму прототипу, производит считывание count-1
символов. Если раньше встретится символ delim
, то считывается фрагмент до этого символа. Символ delim
считывается, но не записывается в массив. В конец массива автоматически вставляется нулевой символ. В качестве значения метод возвращает ссылку на поток ввода.
Количество записанных в массив символов можно получить с помощью метода gcount()
объекта cin
. Прототип метода:
streamsize gcount() const;
Листинг 2.8. Ввод строки
#include <iostream>
#include <clocale>
#include <process.h>
int main() {
system("chcp 1251"); // Смена кодировки консоли
std::setlocale(LC_ALL, "Russian_Russia.1251");
char str[255] = {0};
std::cout << "Введите строку: ";
std::cout.flush();
std::cin.getline(str, 255);
std::cout << '\'' << str << '\'' << std::endl;
std::cout << std::cin.gcount() << std::endl;
return 0;
}
Помощь сайту
ЮMoney (Yandex-деньги): 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов