gpt4 book ai didi

c++ - 当使用 getline(cin, string) 时,cin 会自动获取它的值而无需询问

转载 作者:行者123 更新时间:2023-11-30 03:55:40 24 4
gpt4 key购买 nike

以下代码仅在第一个 while 循环中运行不佳,它会自动将值赋给 cin,因此在下一个循环之前我没有机会为其提供输入。为什么会这样?

char again = 'y';
while (again=='y') {
int n=1 , chance = 5, score = 0, level = 1;
if (n == 1) {
cout << "Game begin!"<<endl;
while (chance) {
cout << "You have " << chance << " chances left." << endl;
cout<<"level "<<level<<" question!"<<endl;
vector<string> actorset = game(graph,level);
int correct = 0;
string s;
cout << "\nyour answer is:";
std::getline(cin, s);
cout << "Your Answer is " << s <<endl;
vector<string>::iterator vit = actorset.begin();
vector<string>::iterator ven = actorset.end();
cout << "Correct Answers are: "<<endl;
for ( ; vit != ven; vit++) {
if (s.compare(*vit) == 0) {
correct = 1;
}
cout << *vit <<'\t';
}
cout <<'\n';
if (correct == 0) {
chance --;
cout << "Incorrect answer" << endl;
cout << "Your total score is " << score <<"."<<endl;
} else {
score += 10;
level++;
cout <<"Correct answer! You get 10 points!"<<endl;
cout << "Your total score is " << score <<"."<<endl;
}
}
}
cout <<"high score handler"<<endl;
output.open (outfile_name, std::fstream::in | std::fstream::out);
highscore(output,score);
cout << "type y for another try: ";
cin >> again;
}

最佳答案

罪魁祸首几乎可以肯定是您 cin >> again;

至少在大多数系统上,您需要按 yEntery 输入程序。

这使得 enter 仍然在输入缓冲区中等待。在循环的下一次迭代中,std::getline 查看输入缓冲区,看到 enter,并将其作为空行读取。因为它看到一个已输入的“行”,所以它不会等待更多——它只是读入该空行,并将其返回给您的程序进行处理。

避免这种情况的通常方法是避免混合面向字符的输入和面向行的输入。如果您不能完全避免它,那么您通常希望添加代码以忽略面向字符的输入和面向行的输入之间的输入行的剩余部分。

关于c++ - 当使用 getline(cin, string) 时,cin 会自动获取它的值而无需询问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28956376/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com