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

C#如何限制Console.ReadLine()仅允许用户输入数字?

如何限制Console.ReadLine()仅接受数字输入(C#)

你的代码崩溃是因为Convert.ToDecimal()在输入非数字字符串时会抛出FormatException,且未做异常处理。以下是两种实用的解决方法:

方法一:使用decimal.TryParse(推荐,简洁高效)

通过TryParse方法尝试解析输入,它不会抛出异常,而是返回布尔值表示解析是否成功。配合循环可以实现直到用户输入有效数字才继续执行:

decimal valor;
Console.WriteLine("请输入一个数字:");
// 循环直到解析成功
while (!decimal.TryParse(Console.ReadLine(), out valor))
{
    Console.WriteLine("输入无效,请重新输入数字:");
}
// 此时valor已为有效decimal类型,可直接使用
Console.WriteLine($"你输入的数字是:{valor}");

如果需要支持负数、小数格式(比如带负号、小数点),TryParse会自动识别标准格式,无需额外修改。

方法二:实时过滤输入字符(严格限制输入)

如果需要用户无法输入非数字字符,可以通过Console.ReadKey()逐个处理按键,只允许数字、退格,以及可选的负号、小数点:

Console.WriteLine("请输入数字(仅允许数字、负号、小数点):");
string input = string.Empty;
ConsoleKeyInfo key;

do
{
    key = Console.ReadKey(true); // 不自动显示按键,手动控制输出
    // 允许数字、退格、负号(仅开头)、小数点(仅一个)
    bool isAllowed = char.IsDigit(key.KeyChar) 
        || key.Key == ConsoleKey.Backspace
        || (key.KeyChar == '-' && input.Length == 0)
        || (key.KeyChar == '.' && !input.Contains("."));

    if (isAllowed)
    {
        if (key.Key == ConsoleKey.Backspace && input.Length > 0)
        {
            // 删除最后一个字符并更新控制台显示
            input = input.Remove(input.Length - 1);
            Console.Write("\b \b");
        }
        else if (key.Key != ConsoleKey.Backspace)
        {
            input += key.KeyChar;
            Console.Write(key.KeyChar);
        }
    }
} while (key.Key != ConsoleKey.Enter); // 按回车结束输入

// 输入已确保为有效数字格式,直接解析
decimal valor = decimal.Parse(input);
Console.WriteLine($"\n你输入的数字是:{valor}");

注意事项

  • 方法一适合大多数场景,代码简洁且容错性强,无需限制用户输入行为,只需在输入错误时提示重新输入。
  • 方法二更适合需要严格控制输入内容的场景,但代码相对复杂,需要处理多种按键情况。

内容的提问来源于stack exchange,提问作者Emerson de Brito Campos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 13:12:41