为什么重复5次?

0 c++ string while-loop

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次,无论如何,那里发生了什么以及它为什么不起作用?

Win*_*ute 6

这个:

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)

......读一行.