所以我一直在研究Bjarne Stroustrup的PPP书中的编程,并且有以下任务:
修改练习19中的程序,以便在输入整数时 该程序将输出具有该分数或“未找到分数”的所有名称。 所以这是我写的代码:
using namespace std;
int main() {
vector <string> names;
string name;
vector <int> scores;
int score;
string finish = "no more";
cout << "Please write a player's name and the player's score: \n";
while (name != "|") {
cin >> name;
cin >> score;
names.push_back(name);
scores.push_back(score);
cin.ignore();
}
for (size_t j = 0; j < scores.size(); j++) {
for (size_t p = 0; p < scores.size(); p++) {
if (names[j] == names[p] && j != p) {
cout << "Error! You have reiterated the name: " << names[j] << "\n";
system("pause");
return 1;
}
}
}
cout << "Please insert a name to see it's score:\n";
string s = " ";
cin >> s;
for (size_t d = 0; d < scores.size(); d++) {
if (s == names[d]) {
cout << names[d] << "'s score is: " << scores[d] << "\n";
}
}
system("pause");
}
现在我的问题很简单,我相信。在第二个 cin(cin&gt;&gt; s)中,编译器似乎只是跳过这一行并终止程序而不是让我写一个输入。我在网上看到,这是因为你不能使用 cin 两次,所以当我添加行cin.ignore()
时,希望问题能够解决,它无助于解决问题。有关如何解决此问题的任何提示?
答案 0 :(得分:2)
我认为问题在于,当您使用cin >> score
并输入不是整数的内容时,会设置cin
流上的错误标记,并且将来的操作会失败。在阅读更多输入之前,您需要使用cin.clear()
清除此错误。
您的学生姓名循环也是错误的。你永远不会检查“没有更多”的名字。你检查“|”作为名称,但直到您完成输入处理。正如说明所说,使用no more
作为输入的目的是cin >> score
失败,因为more
不是数字。
相反,请使用while (cin >> name >> score)
一次读取名称和分数。当您输入无效分数时,这将失败并且循环结束。
using namespace std;
int main() {
vector <string> names;
string name;
vector <int> scores;
int score;
cout << "Please write a player's name and the player's score: \n";
while (cin >> name >> score) {
names.push_back(name);
scores.push_back(score);
cin.ignore();
}
cin.clear(); // Clear error flag from above
for (size_t j = 0; j < scores.size(); j++) {
for (size_t p = 0; p < scores.size(); p++) {
if (names[j] == names[p] && j != p) {
cout << "Error! You have reiterated the name: " << names[j] << "\n";
system("pause");
return 1;
}
}
}
cout << "Please insert a name to see it's score:\n";
cin >> s;
for (size_t d = 0; d < scores.size(); d++) {
if (s == names[d]) {
cout << names[d] << "'s score is: " << scores[d] << "\n";
}
}
system("pause");
}
答案 1 :(得分:-1)
这里发生的是,当你按下输入字符&#39; \ n&#39;还在流中。所以你需要冲洗cin以便能够再次继续。为此,请使用
std::cin.clear();
std::cin.ignore(numeric_limits<streamsize>::max(), '\n');
每次打电话给cin之后。 numeric_limits<streamsize>::max
可与标题#include <limits>
一起使用