如何让C#控制台程序先批量输入数据再统一结构化输出?
修改后的C#控制台代码(批量输入后统一输出)
需求说明
原代码输入一组棒材参数就立即执行结构化输出,现调整为:先询问要处理的棒材数量,批量完成所有参数输入后,再统一输出所有计算结果。
修改后完整代码
using System; using System.Collections.Generic; namespace ConsoleApp3 { // 自定义棒材数据类,替代原数组,提升代码可读性与维护性 public class BarData { public float Radius { get; set; } public float Lambda { get; set; } public float Length { get; set; } public float DeltaTime { get; set; } public float ColdTemp { get; set; } public float HotTemp { get; set; } public float Area { get; set; } public float DeltaQ { get; set; } public float DeltaQPerDeltaTime { get; set; } } class Program { static void Main() { do { try { Console.Write("请输入要处理的棒材数量:"); int barCount = int.Parse(Console.ReadLine()); var barList = new List<BarData>(); const float PI = (float)Math.PI; // 批量输入所有棒材参数并计算 for (int i = 0; i < barCount; i++) { Console.WriteLine($"\n=== 输入第{i + 1}根棒材参数 ==="); var bar = new BarData(); Console.Write("输入棒材半径:"); bar.Radius = float.Parse(Console.ReadLine()); bar.Area = PI * bar.Radius * bar.Radius; // 计算横截面积 Console.Write("输入棒材热传导系数λ:"); bar.Lambda = float.Parse(Console.ReadLine()); Console.Write("输入棒材长度:"); bar.Length = float.Parse(Console.ReadLine()); Console.Write("输入时间变化量Δt:"); bar.DeltaTime = float.Parse(Console.ReadLine()); Console.Write("输入棒材低温端温度T2:"); bar.ColdTemp = float.Parse(Console.ReadLine()); Console.Write("输入棒材高温端温度T1:"); bar.HotTemp = float.Parse(Console.ReadLine()); // 计算热传递相关数值 bar.DeltaQ = -((bar.Lambda * bar.Area) / bar.Length) * (bar.ColdTemp - bar.HotTemp) * bar.DeltaTime; bar.DeltaQPerDeltaTime = bar.DeltaQ / bar.DeltaTime; barList.Add(bar); } // 统一输出所有棒材的结构化结果 Console.WriteLine("\n=== 棒材热传递计算结果 ==="); // 打印表头 Console.WriteLine("材质名称 热传导系数 低温T2 高温T1 时间Δt 长度 横截面积 单位时间传热量"); Console.WriteLine(" (cal/sec)/(C cm) (C) (C) (Sec) (cm) (sq cm) (cal/sec)"); Console.WriteLine("---------------------------------------------------------------------------------------"); // 遍历输出每根棒材数据 foreach (var bar in barList) { Console.WriteLine("Ultimate {0:F2} {1:F2} {2:F2} {3:F2} {4:F2} {5:F2} {6:F2}", bar.Lambda, bar.ColdTemp, bar.HotTemp, bar.DeltaTime, bar.Length, bar.Area, bar.DeltaQPerDeltaTime); Console.WriteLine("Supreme {0:F2} {1:F2} {2:F2} {3:F2} {4:F2} {5:F2} {6:F2}\n", bar.Lambda, bar.ColdTemp, bar.HotTemp, bar.DeltaTime, bar.Length, bar.Area, bar.DeltaQPerDeltaTime); } } catch (FormatException) { Console.WriteLine("错误:请输入有效的数字!"); } Console.WriteLine("\n是否继续处理?(Y=是,N=否)"); } while (Console.ReadLine().ToUpper() == "Y"); Console.WriteLine("程序结束,按任意键退出..."); Console.ReadKey(); } } }
核心修改点
- 数据结构优化:用
List<BarData>替代原数组,通过自定义类封装参数,避免索引混乱 - 输入输出分离:先完成所有棒材的输入与计算,存入集合后再统一执行输出逻辑
- 修复语法问题:修正原代码中不完整的
if语句、数组索引越界等错误 - 用户体验提升:添加分段提示、结果分隔线,表头信息更清晰直观
内容的提问来源于stack exchange,提问作者Matthew Lizyness
相关产品推荐
相关产品推荐

