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

C#中Do-while循环结合Int32.TryParse时else分支未触发的问题求助

解决猜数字程序的输入验证问题

嘿,刚看了你的代码,马上就发现问题所在啦!你的程序里多了一个多余的Console.ReadLine(),它位于if-else分支的外面,这直接导致了输入非数字时的交互逻辑混乱,让你误以为else分支没触发。

问题根源分析

当你输入字母时,Int32.TryParse()会返回false,程序其实确实进入了else分支输出错误提示,但紧接着执行了外面的Console.ReadLine()——这行代码会让程序暂停,等待你再次输入内容(比如按回车),这就会掩盖掉错误提示的显示,让你误以为程序直接跳去了下一轮的输入提示。

修复后的代码

我帮你调整了代码,去掉了多余的Console.ReadLine(),同时优化了字符串拼接的写法(用字符串插值更简洁),还修正了随机数生成的小问题,让代码可读性和功能性都更好:

Random slumpat = new Random();
int speltal = slumpat.Next(1, 21); // 注意:Next的上限是开区间,写21才能生成1-20的完整范围
bool spela = true;

do
{
    Console.Write("\n\tGissa på ett tal mellan 1 och 20: ");
    if (Int32.TryParse(Console.ReadLine(), out int tal))
    {
        if (tal < speltal)
        {
            Console.WriteLine($"\tDet inmatade talet {tal} är för litet, försök igen:");
        }
        else if (tal > speltal)
        {
            Console.WriteLine($"\tDet inmatade talet {tal} är för stort, försök igen:");
        }
        else
        {
            Console.WriteLine("\tGrattis, du gissade rätt!");
            Console.ReadLine(); // 这里保留,让用户看完提示再退出
            spela = false;
        }
    }
    else
    {
        Console.WriteLine("\tDu måste ange en siffra!");
    }
} while (spela);

额外小说明

原来的slumpat.Next(1, 20)只能生成1到19的数字,因为Random.Next(min, max)的max是开区间,改成slumpat.Next(1, 21)后才能覆盖1到20的完整范围,这也是个容易忽略的小细节哦!

现在你再测试一下,输入字母时应该会正常显示错误提示,不会再出现逻辑混乱的情况啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 18:22:47