Я пытался запустить вашу программу в VS 2010, и даже когда я ввел правильный номер, программа, к моему удивлению, пропустила чтение следующего имени.
Мне кажется, что cin >> number
не'' проглотить '\ n', который я, естественно, ввел после числа.
Я попытался добавить вызов getchar () после каждого cin >> number
, и программа неожиданно начала работать, как и ожидалось.
Таким образом, вывод заключается в том, что вы должны очистить () / ignore () после cin >> number
даже после того, как введенное число было в порядке, или прибегнуть к использованию getline () (и затем синтаксического анализа) для чтения чисел.
Еслиесли вы не хотите вводить возраст «готово», то вы должны выйти из цикла сразу после его ввода.Мой окончательный код:
#include <iostream>
#include <string>
using namespace std;
int main()
{
int number;
string name;
while(true)
{
cout << "Your name: " ;
getline(cin, name);
if(name == "done")
break;
cout <<name<< " age: " ;
cin >> number;
cin.clear();
cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
}
}