Итак, я делаю упражнение для книги программирования на С ++, и он просит меня создать программу, в которую я вводим имена и оценки рядом с этими именами, и они оба сохраняются в векторах , Затем, после того как я закончу ввод, я попрошу ввести имя, после чего он найдет соответствующий балл для этого имени. e.x. Я набираю «Джон», он возвращает 5, если это то, что я ставлю на счет Джона.C++ cin >> не начинается снова
Проблема, с которой я столкнулся, заключается в том, что после того, как пользователь выполнил ввод имен и оценок, моя программа предложит пользователю ввести имя (чтобы найти соответствующий балл), код просто пропускает команду cin
и движется дальше, что делает мою программу неработоспособной. Я буду размещать полную программу, то часть мне нужна помощь с:
#include "std_lib_facilities.h"
int main()
{
vector<string>names;
vector<int>scores;
string name = "";
int score;
while(cin >> name && cin >> score)
{
for(int i = 0; i < names.size(); ++i) // checks all previous words
{
if(name == names[i]) // if the name is used twice, exit
{
cout << "Error. Terminating...\n";
exit(4);
}
else;
}
names.push_back(name);
scores.push_back(score);
}
cout << "Enter a name, which I will find the score for. \n";
string locateName;
while(cin >> locateName) // i think the program won't accept the locateName
{
for(int i = 0; i < names.size(); ++i)
{
if(locateName == names[i])
{
cout << names[i] << "'s score is " << scores[i] << '\n';
}
else { cout << "Name not found. \n"; }
}
}
return 0;
}
Вот та часть, которая не работает:
cout << "Enter a name, which I will find the score for. \n";
string locateName;
while(cin >> locateName)
{
for(int i = 0; i < names.size(); ++i)
{
if(locateName == names[i])
{
cout << names[i] << "'s score is " << scores[i] << '\n';
}
else { cout << "Name not found. \n"; }
}
}
В частности, while(cin >> locateName)
. Вот некоторая дополнительная информация: всякий раз, когда я ввожу имена (John 5 Bob 6 Pete 9), я нажимаю CTRL + Z, затем ENTER, чтобы остановить cin
. Затем программа заканчивается. Это (ctrlZ), что заставляет while(cin >> locateName)
не принимать новые значения? Спасибо, спасибо.
Вот подсказка/идея - сколько раз она говорит «Имя не найдено»? Только один или два раза? (Я спрашиваю об этом, потому что, когда вы просматриваете цикл, для каждого элемента цикла вы будете выводить что-то. Учитывая ваш пример, если вы ищете Пит, вы получите: «Имя не найдено. \ NName не найдено . \ nПет рейтинг 9 \ n ") –
Предложение без темы: не разбить имена и баллы на два вектора, создать структуру, в которой хранятся оба и сделать один вектор этой структуры. – user4581301
@ user4581301 В упражнении книги сказано использовать векторы. Мы еще не изучили данные. – jiggumbob