Попробуйте stop = temp.empty()
вместо.getline
не должно содержать символов новой строки.Пустая строка должна приводить к пустой строке.
Кроме того, Чарльз прав, ваше условие в то время как неправильное, используйте while( !stop && ind < 20)
.В том виде, как вы это написали, пользователю нужно ввести 20 значений и пустую строку.Изменение Чарльза говорит, что нарушается, когда выполняется любое условие (не оба).
Для полноты, вот предлагаемый новый код:
bool stop = false;
int ind = 0;
while( !stop && ind < 20 ){
cout << "Enter name #" << (ind+1) << ":";
string temp;
getline(cin, temp);
if(temp.empty()) {
stop = true;
} else {
names[ind] = temp;
}
ind++;
}
Лично я написал бы кодследующим образом:
vector<string> names;
for(int ind = 0; ind < 20; ind++) {
cout << "Enter name #" << (ind + 1) << " (blank to stop): ";
string name;
getline(cin, name);
if(name.empty() || cin.eof()) {
break;
}
names.push_back(name);
}
cout << "Read " << names.length() << " names before empty line detected." << endl;