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

C#程序遇System.FormatException:输入字符串格式错误的排查求助

问题原因及解决办法

问题原因

  1. 输入缓冲区残留字符:代码里的Console.Read()只会读取单个字符(回车键的ASCII值13),但输入缓冲区中会残留换行符(ASCII值10)。后续调用Console.ReadLine()时会直接读到这个空的换行字符串,Convert.ToInt32()转换空字符串就会抛出FormatException。
  2. 无效输入未做校验:如果用户输入的不是1、2这类有效整数(比如字母、符号、非数字字符),Convert.ToInt32()也会直接抛出格式错误异常,因为它无法将非数字字符串转为整数。

解决办法

方案1:清理输入缓冲区残留

把Console.Read()替换为Console.ReadLine(),完整读取用户的回车输入,避免缓冲区残留:

using System;
namespace Project1 {
    class Program {
        static void Main(string[] args) {
            Console.WriteLine("PREPARING GAME: HEADS AND TAILS");
            Console.WriteLine("PRESS ENTER TO CONTINUE");
            Console.ReadLine(); // 替换Console.Read()
            Console.WriteLine("PICK A NUMBER:");
            Console.WriteLine("1: HEADS");
            Console.WriteLine("2: TAILS");
            Console.WriteLine("----------------");
            int playerNum = Convert.ToInt32(Console.ReadLine());
        }
    }
}

方案2:使用安全的转换方法(推荐)

用int.TryParse()替代Convert.ToInt32(),它会返回转换是否成功的布尔值,避免程序因无效输入崩溃,还能引导用户重新输入有效内容:

using System;
namespace Project1 {
    class Program {
        static void Main(string[] args) {
            Console.WriteLine("PREPARING GAME: HEADS AND TAILS");
            Console.WriteLine("PRESS ENTER TO CONTINUE");
            Console.ReadLine(); // 替换Console.Read()
            Console.WriteLine("PICK A NUMBER:");
            Console.WriteLine("1: HEADS");
            Console.WriteLine("2: TAILS");
            Console.WriteLine("----------------");
            
            int playerNum;
            // 循环直到用户输入有效整数
            while (!int.TryParse(Console.ReadLine(), out playerNum) || (playerNum != 1 && playerNum != 2))
            {
                Console.WriteLine("输入无效,请输入1(HEADS)或2(TAILS):");
            }
            // 后续游戏逻辑示例
            Console.WriteLine($"你选择了:{(playerNum == 1 ? "HEADS" : "TAILS")}");
        }
    }
}

额外说明

  • 不需要改用Int16,问题根源不是整数类型的大小,而是输入内容的有效性和缓冲区残留问题。
  • int.TryParse()是处理用户输入转换的最佳实践,能优雅处理无效输入,避免程序直接崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 06:41:19