如何用for循环按指定水平格式打印字符串数组内容?
问题描述
我需要编写程序处理最多100行4列的字符串数组,数组内容由用户输入填充,当输入预设字符串时结束输入,并按指定表格格式(列对应不同字段)打印数组,要求必须使用for循环。但我在打印环节遇到问题:尝试的代码要么将数组内容垂直打印(每个元素单独一行),要么无间隔打印在一行。以下是我最后尝试的代码:
Console.WriteLine(" Your receipt"); Console.WriteLine(""); Console.WriteLine("Item name Price Quantity Subtotal"); for (i = 0; i < count; i++) { for (j = 0; j < 4; j++) { Console.WriteLine(string.Join(" ", items[i , j])); } }
其中count用于记录用户添加的总行数,避免打印空元素。请问我的代码哪里出错了?
问题分析与解决
你这段代码的问题主要出在两点:
- 错误使用
Console.WriteLine:WriteLine会在每次调用后自动换行,导致每个数组元素单独占一行,直接让内容变成垂直排列。应该用Console.Write输出同一行的所有元素,等整行的四个列都打印完,再用WriteLine换行。 string.Join用法错误:string.Join的作用是把集合里的元素用分隔符拼接成字符串,但你只传了单个items[i,j],完全发挥不了它的作用,甚至会产生奇怪的输出(比如把字符串的每个字符用空格分隔)。
修正后的代码如下:
Console.WriteLine(" Your receipt"); Console.WriteLine(""); Console.WriteLine("Item name Price Quantity Subtotal"); for (int i = 0; i < count; i++) { // 遍历当前行的4列,用Write输出在同一行 for (int j = 0; j < 4; j++) { // 用PadRight固定列宽,保证表格对齐,数值可按需调整 Console.Write(items[i, j].PadRight(18)); } // 整行打印完成后换行 Console.WriteLine(); }
如果想要更精准的对齐效果,也可以用格式化字符串直接输出整行(若允许省略内层for循环的话,若要求必须用for循环,上面的写法即可):
for (int i = 0; i < count; i++) { // 格式化字符串里的,-18表示左对齐,占18个字符宽度 Console.WriteLine("{0,-18}{1,-15}{2,-15}{3,-15}", items[i,0], items[i,1], items[i,2], items[i,3]); }
内容的提问来源于stack exchange,提问作者StatisticalPizza
相关产品推荐
相关产品推荐

