为什么它重复5次?

Why it repeats 5 times?

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();
    }
}

这是我要在我的程序中调用的函数。但是我被困住了,很生气,因为我自己找不到解决办法。它的作用是,如果 "if statement" 中的条件为真,则我的输出不是我所期望的。输出重复5次“尝试更正。你的句子是:我买了一辆新车..

为什么它正好重复 5 次等等,这是怎么回事,为什么它不起作用?

这个:

cin >> incorrectSentence;

不读取一行,而是读取一个以空格分隔的标记。如果您输入的是正确的句子,这意味着第一次它会读取 "I",而句子的其余部分保留在输入流中。该程序正确地确定 "I""I have bought a new car" 不同,然后循环并第二次读取 "have"。这也和正确的句子不一样,所以又循环了一遍"bought"。这一直持续到从流中读取所有内容,此时 cin >> incorrectSentence; 再次阻塞。

解决方法是使用

getline(cin, incorrectSentence);

...读取一行。