ограничение размера строки ввода cin.get () и getline () - PullRequest
0 голосов
/ 09 июня 2018

В этом проекте пользователь может ввести текст ( максимум 140 символов ).поэтому для этого ограничения я однажды использовал getline():

  string text;
  getline(cin, text);
  text = text.substr(1, 140);

, но в этом случае результатом cout << text << endl; является пустая строка.

, поэтому я использовал cin.get() как:

cin.get(text, 140);

на этот раз я получаю эту ошибку: нет соответствующей функции для вызова 'std :: basic_istream :: get (std :: __ cxx11 :: string &, int)'

обратите внимание, что явключили <iostream>

, поэтому вопрос в том, как я могу это исправить, почему это происходит?

1 Ответ

0 голосов
/ 09 июня 2018

Ваш первый подход - звук с одной коррекцией - вам нужно использовать

text = text.substr(0, 140);

вместо text = text.substr(1, 140);.Контейнеры (которые содержат строку) в C / C ++ начинаются с индекса 0, и вы запрашиваете обрезку строки с позиции 1. Это прекрасно, но если длина строки составляет всего один символ, вызов text.substr(1, 140); вызоветне обязательно вызывает сбой программы, но также не приведет к желаемому результату.

Согласно этот источник , substr вызовет исключение вне диапазона, если вызывается с начальной позицией, большей длины строки.В случае строки из одного символа позиция 1 будет равна длине строки, но возвращаемое значение не имеет смысла (на самом деле, это может быть даже неопределенное поведение, но я не могу найти подтверждение этого утверждения - в вашем и моем случаевызов его возвращает пустую строку).Я рекомендую вам проверить это самостоятельно в разделе интерактивного кодирования по ссылке выше.

Ваш второй подход пытался передать строку функции, которая ожидала массивы символов в стиле C.Опять же, больше можно найти здесь .Как и в случае ошибки, компилятору не удалось найти подходящую функцию, поскольку аргумент был строкой, а не массивом char.Некоторые функции выполняют преобразование строки в тип char, но здесь это не так.Вы можете преобразовать строку в массив char самостоятельно, как, например, описано в этом посте , но первый подход намного больше соответствует практикам C ++.

Последнее замечание - в настоящее время выЯ полагаю, что вы захотите изменить это только на одной строке ввода.

...