getline (cin.name) пропускается - PullRequest
4 голосов
/ 23 ноября 2011

Я вызываю функцию из функции в C ++, которая имеет строку getline(cin,name), где name является строкой. При первом прохождении цикла программа не ожидает ввода. Это будет на всех других проходах через цикл. Любые идеи о том, почему?

void getName (string& name)
{ 
     int nameLen; 
      do{
          cout << "Enter the last Name of the resident." << endl << endl
              << "There should not be any spaces and no more than 15"
              << " characters in the name."  << endl;



         getline(cin,name);
            cout << endl;
            nameLen = name.length();// set len to number of characters input

         cout << "last" << name << endl;
         }
      while (nameLen < LastNameLength);   
      return;
}

Ответы [ 3 ]

6 голосов
/ 23 ноября 2011

Убедитесь, что с момента последнего прочтения чего-либо из cin в последний раз ничего не осталось, например:
В более ранней точке вашей программы:

int number;
cin >> number;

Вводимые вами данные:

5

Позже в программе:

getline(cin,name);

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

2 голосов
/ 17 декабря 2013

Есть ли у вас: cin << variableName; </strong>

строк кода?Я столкнулся с getline (), пропускающим ошибки времени выполнения при использовании:

cin << intvariable </strong> и впоследствии getline (cin, variable)

Это потому, что объект потока cin содержит буфер ввода.Когда вы вводите символ новой строки, я предполагаю, что он обрезан из потока, идущего к переменной asisgnment, но все еще содержится в самом экземпляре объекта cin.

Я использовал один обходной путь: cin.ignore () ;после оператора cin << integer </strong>.

Другой пользователь упомянул, что все входные данные из getline разбираются в целые числа, числа с плавающей запятой, а не root-пиво, и строки.Удачи и проверьте ваш код для двойного использования cin & getline ().

2 голосов
/ 23 ноября 2011

Это может быть из-за входного потока.Функция getline прекращает чтение ввода после того, как получает первый символ новой строки.Например, если в буфере std :: cin есть несколько новых строк - getline будет возвращаться каждый раз, когда встречается с ним.

Проверьте ожидаемый ввод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...