在 C# 控制台程序中获取用户输入通常使用 Console.ReadLine() 和 Console.ReadKey() 方法。以下是不同场景下的完整解决方案和最佳实践:
一、基础输入方法
1. 获取单行文本输入
Console.Write("请输入您的姓名:");
string name = Console.ReadLine();
Console.WriteLine($"您好,{name}!");
2. 获取单个字符(无需回车确认)
Console.Write("请选择操作 (Y/N):");
ConsoleKeyInfo key = Console.ReadKey(intercept: true); // 不显示按键
Console.WriteLine($"\n您选择了:{key.KeyChar}");
二、输入验证与重试机制
1. 验证整数输入
int age;
bool isValid = false;
do
{
Console.Write("请输入年龄:");
string input = Console.ReadLine();
if (int.TryParse(input, out age) && age > 0)
{
isValid = true;
}
else
{
Console.WriteLine("输入无效,请重新输入正整数!");
}
} while (!isValid);
2. 验证枚举选项
public enum MenuOption { Start, Load, Exit }
MenuOption selectedOption;
do
{
Console.WriteLine("1. 开始游戏\n2. 加载存档\n3. 退出");
Console.Write("请选择:");
} while (!Enum.TryParse(Console.ReadLine(), out selectedOption) ||
!Enum.IsDefined(typeof(MenuOption), selectedOption));
三、高级输入处理
1. 多值输入分割处理
Console.Write("请输入3个数字(空格分隔):");
string[] inputs = Console.ReadLine().Split(' ');
if (inputs.Length == 3 &&
double.TryParse(inputs[0], out double x) &&
double.TryParse(inputs[1], out double y) &&
double.TryParse(inputs[2], out double z))
{
Console.WriteLine($"计算结果:{x + y + z}");
}
else
{
Console.WriteLine("输入格式错误");
}
2. 超时输入检测(需引用 System.Threading)
using System.Threading;
Console.Write("请在5秒内输入文本:");
string input = null;
var inputTask = Task.Run(() => input = Console.ReadLine());
if (inputTask.Wait(TimeSpan.FromSeconds(5)))
{
Console.WriteLine($"您输入了:{input}");
}
else
{
Console.WriteLine("\n输入超时!");
Environment.Exit(0);
}
四、输入优化技巧
颜色提示:使用 Console.ForegroundColor 区分提示和输入
Console.ForegroundColor = ConsoleColor.Yellow;
Console.Write("[警告] ");
Console.ResetColor();
Console.Write("确认删除?(Y/N):");
输入掩码(密码场景)
Console.Write("输入密码:");
string password = "";
while (true)
{
var key = Console.ReadKey(true);
if (key.Key == ConsoleKey.Enter) break;
password += key.KeyChar;
Console.Write("*");
}
历史记录:使用 List<string> 保存输入历史
五、输入与输出的关系处理
场景 推荐方法 优势
需要即时响应 Console.ReadKey() 无需回车,实时交互
多参数输入 Split() 分割字符串 单次输入多个值
复杂验证逻辑 while + TryParse 组合 强制合法输入
需要取消操作 CancellationTokenSource 实现异步取消
六、常见问题解决方案
问题:输入后控制台立即关闭
// 在程序最后添加(调试时有用)
Console.WriteLine("按任意键退出...");
Console.ReadKey();
问题:中文乱码
// 程序入口设置编码
Console.OutputEncoding = System.Text.Encoding.UTF8;
问题:输入内容包含逗号的分割错误
// 使用正则表达式分割
using System.Text.RegularExpressions;
string[] parts = Regex.Split(input, @"\s*,\s*");
通过以上方法,可以构建健壮的控制台输入系统。对于需要处理 10万+次输入的场景,建议:
采用异步输入 (Console.In.ReadLineAsync())
使用生产者-消费者模式分离输入和处理
启用缓冲区优化:
Console.SetIn(new StreamReader(Console.OpenStandardInput(),
Console.InputEncoding,
false,
bufferSize: 1024 * 1024));
如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。