c#怎么从控制台输入数组?几种常用方法详解

来源:网站建设作者:广州网站建设头衔:草根站长
导读:本期聚焦于广州网站建设创作的《c#怎么从控制台输入数组?几种常用方法详解》,敬请观看详情。在C#控制台程序里录入一组数据是新手常遇到的需求,比如让用户一次性输入若干个整数或字符串,再存进数组里做后续处理。本文围绕C#怎么从控制台输入数组这个问题,详细讲解几种常见做法:先用循环配合ReadLine逐个读取元素,适合入门理解;再用Split方法一次性解析整行输入,代码更简洁;还会介绍Console.ReadLine自动拆分、空格与逗号分隔的混合处理、异常输入校验等技巧,并对比各方案的适用场景与优缺点,帮助你在不同需求下选择合适的输入方式,写出健壮的控制台程序。

C#控制台程序中最基础也最常见的交互需求之一,就是让用户从键盘输入一组数据并保存到数组中。虽然看起来简单,但实际写法有好几种,每种适用的场景也不一样。有的人习惯让用户逐个输入元素,有的人喜欢让用户把所有数字写在一行里用空格隔开,还有人需要处理用户输错的情况。下面就来详细介绍几种主流的实现方式,并分析它们各自的优缺点。

c#怎么从控制台输入数组?几种常用方法详解

方法一:循环配合ReadLine逐个输入元素

这是最直观的方式:先询问用户数组的长度,然后创建对应大小的数组,再用一个for循环逐个读取元素。每次调用Console.ReadLine()读取一行输入后,还需要用int.Parse或者Convert.ToInt32把字符串转换成整数。

Console.Write("请输入数组长度:");
int n = int.Parse(Console.ReadLine());

int[] arr = new int[n];
for (int i = 0; i < n; i++)
{
    Console.Write($"请输入第{i + 1}个元素:");
    arr[i] = int.Parse(Console.ReadLine());
}

Console.WriteLine("数组内容为:" + string.Join(" ", arr));

这种写法的优点是逻辑清晰,交互友好,用户每输入一个数都能得到明确的提示,特别适合新手练习。缺点是当数组元素较多时,用户要按很多次回车,操作繁琐,而且只要有一个输入不是合法数字,int.Parse就会直接抛出异常导致程序崩溃。

如果想增强健壮性,可以把int.Parse换成int.TryParse,解析失败时提示用户重新输入,而不是让程序异常退出。这种容错处理在实际项目中非常重要,后面会单独展开讲。

方法二:一行输入多个元素配合Split分割

更符合实际使用习惯的做法,是让用户把所有元素写在一行里,用空格或者逗号隔开,程序一次性读取并拆分。这需要用到字符串的Split方法,再用LINQ的Select把每个子字符串转换成整数。

Console.WriteLine("请输入一组整数,用空格分隔:");
string input = Console.ReadLine();

int[] arr = input
    .Split(' ', StringSplitOptions.RemoveEmptyEntries)
    .Select(int.Parse)
    .ToArray();

Console.WriteLine("共输入{0}个元素,最大值为{1}", arr.Length, arr.Max());

这里有一个细节值得注意:Split(' ', StringSplitOptions.RemoveEmptyEntries)可以自动过滤掉多余的空格。如果不加这个参数,用户不小心输入了两个连续空格,就会拆分出空字符串,导致int.Parse解析失败。

如果希望同时支持空格和逗号混合分隔,可以把分隔符改成数组传入:

int[] arr = input
    .Split(new char[] { ' ', ',', ';', '\t' }, StringSplitOptions.RemoveEmptyEntries)
    .Select(int.Parse)
    .ToArray();

这种方式的优点是输入效率高,一行搞定,也是算法题、笔试上机中最常见的输入格式。缺点是用户必须在同一行输入完所有数据,中途不好修改,而且对输入格式的规范性有一定要求。

方法三:用TryParse做好异常输入校验

前面两种方法都依赖int.Parse,一旦用户输入了字母或者空内容,程序就会抛出FormatException。真正健壮的程序应该用int.TryParse来处理非法输入,给出友好提示并让用户重新输入。

static int[] ReadIntArray(string prompt)
{
    while (true)
    {
        Console.Write(prompt);
        string input = Console.ReadLine();
        string[] parts = input.Split(new char[] { ' ', ',' },
            StringSplitOptions.RemoveEmptyEntries);

        int[] result = new int[parts.Length];
        bool valid = true;

        for (int i = 0; i < parts.Length; i++)
        {
            if (!int.TryParse(parts[i], out result[i]))
            {
                valid = false;
                break;
            }
        }

        if (valid && result.Length > 0)
        {
            return result;
        }
        Console.WriteLine("输入包含非法内容,请重新输入!");
    }
}

调用时只需要int[] arr = ReadIntArray("请输入数组:");,就可以反复提示直到用户输入合法为止。把输入逻辑封装成独立方法还有一个好处:主流程代码不会被输入校验的细节污染,可读性和可复用性都更好。

输入字符串数组与二维数组的处理

如果需要输入的是字符串数组而不是整数数组,那就更简单了,不需要任何类型转换,直接拆分即可:

string[] words = Console.ReadLine()
    .Split(' ', StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine($"共{words.Length}个单词");

如果输入的是double类型的小数数组,只需把int.Parse换成double.Parse即可。但要注意文化区域的问题:某些系统下小数点可能是逗号,必要时可以指定CultureInfo.InvariantCulture来统一格式。

至于二维数组,常见的输入格式是第一行给出行列数,后面每行输入一行元素,此时需要嵌套循环:

string[] size = Console.ReadLine().Split(' ');
int rows = int.Parse(size[0]);
int cols = int.Parse(size[1]);

int[,] matrix = new int[rows, cols];
for (int i = 0; i < rows; i++)
{
    string[] line = Console.ReadLine().Split(' ');
    for (int j = 0; j < cols; j++)
    {
        matrix[i, j] = int.Parse(line[j]);
    }
}

这种格式在在线评测系统和算法竞赛中非常常见,掌握它对刷题帮助很大。

总结与选择建议

三种核心方案的适用场景可以这样概括:需要友好交互、逐个确认的用循环加ReadLine;追求输入效率、格式规整的用Split加LINQ;对健壮性要求高、面向普通用户的务必用TryParse做校验。实际开发中完全可以把它们组合起来,比如用Split读整行,再用TryParse逐个验证,既高效又不会因为一次手误就让程序崩掉。

另外提一点,Console.ReadLine返回的值可能为null(比如输入流被重定向结束时),严格来说应该做null判断。养成这些细心的编码习惯,你的控制台程序会稳定得多。

c#控制台输入数组C#数组输入Console.ReadLine修改时间:2026-09-13 13:24:30

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/20260913/56028.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。