Основной вопрос cout / cin - PullRequest
       3

Основной вопрос cout / cin

0 голосов
/ 30 января 2011
cin >> Input; {
 if(Input == "a")
  Position = "first";
 else if(Input == "b")
  Position = "second";
 else if (Input == "c")
  Position = "third";
 else if(Input == "Stop")
  break;
 }

После cin >> Ввод У меня есть еще две секции cin.По какой-то причине он пропускает getline для Name.После того, как я cin >> Ввод, он показывает Имя: Статус: и затем делает getline для статуса.

  cout << "Name: ";
   getline(cin, Name);
   if(Name == "Stop")
   break;

 cout << "Status: ";
  getline(cin, Status);
  if(Status == "Stop")
  break;

Ответы [ 3 ]

1 голос
/ 30 января 2011

Проблема в том, что большинство операций ввода оставят символ новой строки во входном буфере (но не getline()), дополнительная информация - здесь .
В вашем случае эта строка:

cin >> Input; {

оставит /n, что позже будет передано:

getline(cin, Name);

Быстрое решение:

Заменить cin >> Input; на getline(cin, Input);

1 голос
/ 30 января 2011

cin >> somevar оставляет после новой строки.Независимо от того, какой тип somevar, даже если это std :: string, символ конца строки не читается этим оператором.Таким образом, когда вы добираетесь до части имени, вы читаете конец строки для строки somevar, которая, по-видимому, пуста.Бросьте строку getline перед попыткой прочитать имя, и все должно быть в порядке.

1 голос
/ 30 января 2011

Я думаю, что это должно быть примерно так:

 cin.getline(whatever);
 cin.ignore(1, '\n');

Смотрите, когда вы читаете какой-то текст из stdin, конец строки определяется как \n (по умолчанию).И когда вы нажимаете Return в окне консоли, этот символ пропускается, но он присутствует.Поэтому, когда вы пытаетесь прочитать следующую строку, она встречает ранее забыли \n и завершает чтение, возвращая пустую строку.

Считайте это для получения подробной информации.

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