2015-04-18 1 views
1

Я в основном пытаюсь получить имя пользователя (и я хочу, чтобы они могли использовать пробелы, поэтому я должен использовать getline), а затем название их вымышленного королевства. Но когда я запускаю этот код, он проскакивает впереди себя. Он запрашивает имя, но затем он пропускает и запрашивает имя королевства, прежде чем разрешить пользователю вводить свое имя. Я пробовал cin.ignore(), но это не работает. У кого-нибудь есть предложения?Getline не работает по назначению со строками

string playerName = "nyd"; //declaring string playerName 
string kingdomName = "nyd"; //declaring string countryName 
int monarchAge; //declaring monarch age variable. 

cout << "  Welcome, your majesty! What is your name?\n"; 
getline(cin,playerName); 
cout << "  And what is the name of your grand kingdom, " << playerName << "?\n"; 
getline(cin,kingdomName); 
cin.ignore(); 
cout << "  And finally, how old are you, Lord " << playerName << " of " << kingdomName << "?\n"; 
cin >> monarchAge; 
+1

Скорее всего http://stackoverflow.com/questions/21567291/why-does-stdgetline-skip-input-after-a-formatted-extraction, и этот вызов 'ignore', скорее всего, просто ест первый символ от возраста. – chris

+1

Почему вы называете 'cin.ignore();' на самом деле? –

+0

Я читал где-то, что cin.ignore() может помочь, поэтому я его попробовал, не думаю, что –

ответ

0

Фрагмент кода, который вы указали, действительно правильный. Я получаю ожидаемое поведение, когда компилирую его локально.

Я все еще думаю, что могу рассказать вам, что происходит в вашем коде. Я предполагаю, что фрагмент, который вы связали, является частью вашей программы, прежде чем код, который не подходит, скорее всего, допустил ошибку. Что-то вроде попытки прочитать число с плавающей запятой в целочисленную переменную или подобное. Это приведет к тому, что ваш поток (в данном случае cin) будет помечен как плохой.

Как только поток отмечен как плохой, он просто игнорирует все будущие вызовы как getline(), так и operator>> до тех пор, пока не будет вызван cin.clear(), чтобы сбросить флаг ошибки.

Итак, исправление будет, узнайте, что делает ваш поток плохим.

+0

Большое вам спасибо! Я никогда не был бы, хотя это проблема с моим кодом ранее в программе, которая теперь исправлена ​​и все работает. Благодаря! –