如何在C#控制台中实现多行文本居中输出?
控制台多行文本居中解决方案
你的问题根源在于只有第一行手动设置了光标居中位置,后续行调用Console.WriteLine()时会自动回到行首,导致布局混乱。而且代码里的string.Length是错误写法,应该使用对应文本变量的Length属性(比如title.Length)。
直接封装一个通用方法来处理单行或多行文本的居中输出,这样不管多少行都能统一处理:
using System; public static class ConsoleHelper { public static void WriteCentered(string text) { // 将文本按换行拆分成单独行 string[] lines = text.Split(new[] { Environment.NewLine }, StringSplitOptions.None); foreach (string line in lines) { // 计算居中起始位置,避免文本过长导致负数值 int cursorLeft = Math.Max(0, (Console.WindowWidth - line.Length) / 2); Console.SetCursorPosition(cursorLeft, Console.CursorTop); Console.WriteLine(line); } } }
使用示例
string title = "--------Message-------"; string msg = "Hello"; // 分别输出多行 ConsoleHelper.WriteCentered(title); ConsoleHelper.WriteCentered(msg); // 或者合并成带换行的文本一次性输出 ConsoleHelper.WriteCentered($"{title}{Environment.NewLine}{msg}");
额外说明
- 如果控制台窗口大小被用户调整,当前输出的文本不会自动重新居中,若需要动态适配,可以监听
Console.WindowResize事件,在事件触发时重新输出内容。 - 当单行文本长度超过控制台窗口宽度时,代码里的
Math.Max(0, ...)会让文本左对齐,避免光标位置为负数引发异常。
内容的提问来源于stack exchange,提问作者Itsmemonzu
相关产品推荐
相关产品推荐

