На данный момент у меня есть текстовый файл, содержащий информацию о различных исполнителях мюзиклов.
David Byrne 1 Talking_Heads Lead-Vocals
Chris Frantz 1 Talking_Heads Drummer
Tina Weymouth 3 Talking_Heads Compass_Point_All_Stars Tom_Tom_Club Bass
В этом порядке это имя, фамилия, количество групп, в которых они были, группы, в которых они были, и, наконец, их роль в группе. При поиске людей полосы помещаются в вектор для отображения, но этот вектор не заканчивается, поэтому, например, при поиске Тины Веймут будут показаны две предыдущие группы записей, а также группы Тины.
while (artist >> forname >> surname >> bandnum)
{
for (int i = 0; i < bandnum; i++)
{
string tmp;
artist >> tmp;
band.push_back(tmp);
}
artist >> role;
if (strF == forname && strS == surname) {
system("CLS");
cout << "Artist found" << endl;
cout << forname << " " << surname << " ";
ostream_iterator<string> output_iterator(cout, " ");
copy(band.begin(), band.end(), output_iterator);
cout<< role << endl;
system("pause");
}
}
Выше приведен используемый код, он должен считывать число перед именами и создавать вектор такого размера, который содержит каждую полосу, вместо этого он создает бесконечный вектор.
Вы перезаписываете значения forname
, surname
, bandnum
и role
в каждом цикле, но оставляете вектор band
, чтобы он продолжал расти и расти — сохраняя информацию о прошлых исполнителях. Вам нужно очистить и очистить его после каждого цикла!
Простой вызов clear()
— это все, что вам нужно. Просто добавьте следующую строку в начало (или в конец, если хотите) цикла while:
band.clear();
Вот он в действии: идея