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

C#中如何修复回车触发循环异常及空输入误判数字问题?

修复C#输入空回车导致的循环逻辑错误

问题描述

当前代码处理用户输入香蕉购买数量时,输入字母能正常触发循环提示错误,但仅按回车(空输入)时,第一次循环会正确提示,第二次循环却将空输入误判为有效数字,导致执行乘法计算时因转换失败报错。

问题根源

  • 空字符串调用All(char.IsDigit)会返回true(空集合的所有元素默认满足条件),导致空输入被判定为有效数字。
  • 使用Convert.ToDouble转换空字符串会直接抛出异常,没有容错处理。

修复后的代码

using System;

class Geeks
{
    public static void Main()
    {
        const float kg = 1000;
        const float bananaKgPrice = 1.69f;
        const float bananaWeight = 200;
        const float watermelonKgPrice = 3.29f;
        double price;
        string buyChoice;

        Console.WriteLine("Welcome to our shop! We sell bananas and watermelons.");
        Console.WriteLine($"Kilo of bananas costs {bananaKgPrice} euros, kilo watermelons {watermelonKgPrice} euros");
        
        bool loopBreakBuyChoice = true;
        while (loopBreakBuyChoice)
        {
            Console.WriteLine("What do you want to buy? 1 - bananas, 2 - watermelons");
            buyChoice = Console.ReadLine();
            
            switch (buyChoice)
            {
                case "1":
                    loopBreakBuyChoice = false;
                    Console.WriteLine($"Price of bananas per kilo: {bananaKgPrice} euro");
                    
                    bool loopBreakBananaDigits = true;
                    while (loopBreakBananaDigits)
                    {
                        Console.WriteLine("How much bananas do you want to buy?");
                        string bananasInput = Console.ReadLine();
                        
                        // 先检查输入是否为空或全空白
                        if (string.IsNullOrWhiteSpace(bananasInput))
                        {
                            Console.WriteLine("Please insert AMOUNT of bananas.");
                            continue;
                        }
                        
                        // 使用TryParse同时验证并转换数字
                        if (double.TryParse(bananasInput, out double bananaAmount))
                        {
                            loopBreakBananaDigits = false;
                            price = Math.Round(bananaAmount * bananaWeight / kg * bananaKgPrice, 2);
                            Console.WriteLine($"Total price: {price} euros");
                        }
                        else
                        {
                            Console.WriteLine("Please insert a valid number.");
                        }
                    }
                    break;
                    
                case "2":
                    loopBreakBuyChoice = false;
                    Console.WriteLine($"Price of watermelons per kilo: {watermelonKgPrice} euro");
                    // 可复用香蕉的输入验证逻辑实现西瓜购买流程
                    break;
                    
                default:
                    Console.WriteLine("Invalid choice, please enter 1 or 2.");
                    break;
            }
        }
    }
}

关键修改点

  • 增加string.IsNullOrWhiteSpace检查,直接拦截空输入和全空白输入。
  • 用double.TryParse替代All(char.IsDigit),既能验证输入是否为有效数字,又能直接获取转换后的数值,避免后续转换异常。
  • 补充默认分支处理无效的购买选择,完善程序逻辑。
  • 增加总价输出,让程序功能更完整。

内容的提问来源于stack exchange,提问作者максим гурко

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 09:23:27