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

如何在C#中通过控制台一次性输入完整二维矩阵并解决格式异常?

解决C#控制台一次性输入矩阵所有值的FormatException问题

你的问题核心在于输入处理逻辑和用户的输入方式不匹配:你原代码期望用户先输入行列数,再逐行输入每个元素,但实际用户是一次性把行列数+所有矩阵值都输入到一行里了,这就导致后续的Console.ReadLine()要么读取空内容,要么读取的不是有效数字,直接抛出格式异常。

下面是适配一次性输入场景的完整解决方案:

步骤说明

  1. 一次性读取所有用户输入(不管是单行还是多行输入都能处理)
  2. 将输入按空白字符(空格、换行、制表符)分割成独立的数字字符串
  3. 从分割结果中提取前两个值作为矩阵的行和列数
  4. 用剩余的数字填充二维矩阵
  5. 加入基础输入验证,避免未处理的异常

完整代码示例

try
{
    // 读取所有输入(支持单行或多行输入,比ReadLine更灵活)
    string input = Console.In.ReadToEnd();
    
    // 按所有空白字符分割,同时移除空项(避免多个空格/换行产生无效空字符串)
    string[] allValues = input.Split(new[] {' ', '\t', '\n', '\r'}, StringSplitOptions.RemoveEmptyEntries);
    
    // 验证是否至少输入了行列数
    if (allValues.Length < 2)
    {
        Console.WriteLine("错误:请至少输入矩阵的行数和列数");
        return;
    }
    
    // 解析行和列数
    long row = long.Parse(allValues[0]);
    long col = long.Parse(allValues[1]);
    
    // 验证剩余数值是否足够填充矩阵
    if (allValues.Length != 2 + row * col)
    {
        Console.WriteLine($"错误:需要输入 {row * col} 个矩阵值,但实际输入了 {allValues.Length - 2} 个");
        return;
    }
    
    // 创建矩阵并填充数据
    long[,] matrix = new long[row, col];
    int valueIndex = 2; // 跳过前两个行列数值
    for (long i = 0; i < row; i++)
    {
        for (long j = 0; j < col; j++)
        {
            matrix[i, j] = long.Parse(allValues[valueIndex++]);
        }
    }
    
    // 验证输出矩阵
    Console.WriteLine("输入的矩阵为:");
    for (long i = 0; i < row; i++)
    {
        for (long j = 0; j < col; j++)
        {
            Console.Write($"{matrix[i, j]} ");
        }
        Console.WriteLine();
    }
}
catch (FormatException)
{
    Console.WriteLine("错误:输入的不是有效的整数,请检查输入格式");
}
catch (Exception ex)
{
    Console.WriteLine($"发生未知错误:{ex.Message}");
}

针对你的输入示例测试

当用户输入3 3 4 2 1 1 1 3 1 1 2时,代码会:

  • 分割成数组:["3", "3", "4", "2", "1", "1", "1", "3", "1", "1", "2"]
  • 解析得到行=3,列=3
  • 用后续9个值填充3x3矩阵,最终输出:
4 2 1 
1 1 3 
1 1 2 

关键改进点

  • 用Console.In.ReadToEnd()替代多次Console.ReadLine(),确保一次性获取所有输入(包括用户换行输入的情况)
  • 分割时兼容所有空白字符,适配各种输入格式
  • 加入输入长度验证,提前告知用户错误,避免抛出未处理异常
  • 统一使用long.Parse,保持矩阵元素类型和矩阵定义一致(你原代码里矩阵是long[,]但用了int.Parse,这里做了统一)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 09:32:46