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
相关产品推荐
相关产品推荐

