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

While循环无限运行问题:猜题代码无法正常终止求助

问题分析与修复

你的代码陷入无限循环有两个核心原因:

  • guess变量只在程序启动时读取一次用户输入,循环过程中完全没更新这个值。只要第一次猜错,guess != correctAnswer的循环条件就永远成立,直接卡死在无限循环里。
  • while循环的条件已经限定了guess != correctAnswer,所以循环内部的if(guess == correctAnswer)分支根本不可能执行,永远只会输出Try again。

修正后的代码

public class Quiz{
    // 可扩展更多题目与选项
    /*
    * 示例题目
    * 问题1:瑞典第一位国王去世时多少岁?
    * 选项:40 / 60 / 80
    */
    public static int correctAnswer = 40;

    public static void Guess(){
        System.Console.WriteLine("瑞典第一位国王去世时多少岁?");
        int guess;
        do{
            guess = Convert.ToInt32(Console.ReadLine());
            if(guess == correctAnswer){
                System.Console.WriteLine("回答正确,恭喜!");
            } else{
                System.Console.WriteLine("答错了,再试一次。");
            }
        } while(guess != correctAnswer);
    }
}

关键修改点

  • 把guess的声明和输入读取移到Guess方法内部,并且放到循环里,确保每次循环都能获取用户新的猜测值。
  • 使用do-while循环,保证至少会执行一次输入和判断,逻辑更贴合“直到猜对为止”的需求。
  • 合并了冗余的输出语句,让代码更简洁。

如果坚持用while循环,也可以这么写:

public static void Guess(){
    System.Console.WriteLine("瑞典第一位国王去世时多少岁?");
    int guess = 0; // 初始化一个不等于正确答案的值,确保能进入循环
    while(guess != correctAnswer){
        guess = Convert.ToInt32(Console.ReadLine());
        if(guess == correctAnswer){
            System.Console.WriteLine("回答正确,恭喜!");
        } else{
            System.Console.WriteLine("答错了,再试一次。");
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 09:23:21