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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 03:41:42