Linux下C#控制台代码第二数组无输出问题求助
问题:C#代码在Linux下无法显示第二个数组输出
代码示例
int[] Array = { 0, 1, 2, 3, 4, 5 }; int i; for (i = 0; i < 6; i++) Console.Write(" " + Array[i]); Console.WriteLine("\n New Array"); Array = new int[] { 99, 10, 100, 18, 78, 23, 163, 9, 87, 49 }; for (i = 0; i < 10; i++) { Console.Write(" " + Array[i]); } Console.ReadLine();
运行环境(VS Code)
- Version: 1.82.0
- Electron: 25.8.0
- ElectronBuildId: 23503258
- Chromium: 114.0.5735.289
- Node.js: 18.15.0
- V8: 11.4.183.29-electron.0
- OS: Linux x64 5.15.0-83-generic
输出差异
Windows系统正常输出
0 1 2 3 4 5 New Array 99 10 100 18 78 23 163 9 87 49
Linux系统异常输出
0 1 2 3 4 5 New Array
原因分析
核心问题是控制台输出缓冲机制差异:
- Windows下,控制台会在执行
Console.WriteLine(换行操作)或程序结束时自动刷新输出缓冲区; - Linux下,
Console.Write的内容会暂存在缓冲区中,仅当缓冲区满、遇到换行符或手动触发刷新时才会显示到控制台。代码中第二个循环用Console.Write输出后直接调用Console.ReadLine,此时缓冲区内容未被触发刷新,导致第二个数组的输出无法显示。
解决办法
以下几种方案任选其一:
- 强制刷新缓冲区:在第二个循环结束后添加
Console.Flush();,强制将缓冲区内容输出到控制台:for (i = 0; i < 10; i++) { Console.Write(" " + Array[i]); } Console.Flush(); // 添加此行强制刷新 Console.ReadLine(); - 用换行触发刷新:在第二个循环结束后调用
Console.WriteLine();,通过换行操作触发缓冲刷新:for (i = 0; i < 10; i++) { Console.Write(" " + Array[i]); } Console.WriteLine(); // 添加此行触发刷新 Console.ReadLine(); - 调整输出方式:如果允许元素单独换行,可以把循环内的
Console.Write替换为Console.WriteLine,但会改变原输出格式。
内容的提问来源于stack exchange,提问作者CHEL IS OTOVSUDY
相关产品推荐
相关产品推荐

