You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ Do while循环无法终止求助——Goldilocks游戏逻辑异常

解决Goldilocks游戏循环无法终止的问题

嘿,作为C++新手遇到这种逻辑问题太正常啦!我帮你分析下大概率的问题所在,再给你修正思路~

核心问题推测

你说选正确选项(2)也会回到开头循环,最常见的原因有两个:

  • 循环控制的标志位没更新:你定义了bool win = false,但选对选项时没有把win改成true,导致循环条件一直满足,程序反复执行开头逻辑。
  • 正确分支里没有终止循环的逻辑:哪怕你设置了win,如果循环结构里没正确判断这个标志,或者用了goto之类的跳转但没跳过,也会继续循环。

修正示例代码

我补全你的FirstSet函数,给你做个正确的示范:

#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;

void FirstSet() {
    bool win = false;
    string PName;
    int choice;

    cout << "Welcome to Goldilocks! Enter your name: ";
    cin >> PName;

    // 主循环:直到win为true才退出
    while (!win) {
        cout << "\n" << PName << ", choose an option:\n";
        cout << "1. Too hot\n";
        cout << "2. Just right\n";
        cout << "3. Too cold\n";
        cin >> choice;

        switch (choice) {
            case 1:
                cout << "Oops, that's wrong! Back to the start.\n";
                break; // 只跳出switch,循环继续
            case 2:
                cout << "Great job, " << PName << "! You won!\n";
                win = true; // 关键:把win设为true,让循环条件不满足
                break;
            case 3:
                cout << "Nope, that's not right. Try again.\n";
                break;
            default:
                cout << "Invalid input! Please pick 1, 2, or 3.\n";
        }
    }
}

int main() {
    FirstSet();
    return 0;
}

关键细节说明

  • 当用户选择2时,必须执行win = true,这样while (!win)的条件就从true变成false,循环会自然终止,不会回到开头。
  • 如果你的代码里用了do-while循环,逻辑是一样的:必须在正确分支更新控制循环的变量。
  • 要是你用了goto语句跳转到开头,那得在选对选项时跳过这个goto,比如加个if判断:if (!win) goto start;

如果你的完整代码还有其他逻辑(比如主函数里反复调用FirstSet),可以再补充出来,但先检查上面这两个关键点,应该就能解决问题啦!

内容的提问来源于stack exchange,提问作者JoeZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:39:35