void firstSentence(void){
string incorrectSentence;
string correctSentence = "I have bought a new car";
cout << "Your sentence is: I have buy a new car" << endl;
cout << "Try to correct it: ";
cin >> incorrectSentence;
if(incorrectSentence == correctSentence){
cout << "Goosh. Your great. You've done it perfectly.";
}
else{
firstSentence();
}
}
Run Code Online (Sandbox Code Playgroud)
这是我试图在我的程序中调用的函数.但是我很少生气,因为我无法找到自己的解决方案.它的作用是,如果"if语句"中的条件为真,我的输出就不是我的预期.输出重复5次"尝试纠正它.你的判决是:我买了一辆新车..
为什么它重复5次,无论如何,那里发生了什么以及它为什么不起作用?
这个:
cin >> incorrectSentence;
Run Code Online (Sandbox Code Playgroud)
不读取一行而是以空格分隔的标记.如果您的输入是正确的句子,则表示第一次读取"I",而句子的其余部分仍保留在输入流中.程序正确地确定与第二次"I"不同"I have bought a new car",循环和读取"have".这也与正确的句子不同,因此它再次循环并读取"bought".这一直持续到从流中读取所有内容,此时cin >> incorrectSentence;再次阻塞.
解决方案是使用
getline(cin, incorrectSentence);
Run Code Online (Sandbox Code Playgroud)
......读一行.