控制台双行输出

4

我有一段代码,它从数组中输出一些值,并在值a[i]下面的新行中加上-

Console.Write(a[i] + "\n-");

看起来是这样的。
a
-

现在我有更多的Console.Write(a[i+1] + "\n-");代码,输出结果如下:

a
-b
-c
-d
-

我知道为什么会这样,但如何在每个新行\n后返回一行?这样我就可以得到这个结果:

abcd
----

你不能用两个循环完成吗?第一个循环写入所有字母,第二个循环写入所有“-”。 - vyrp
@vyrp 不是的,因为破折号不一定总是低估,可能相反。我在这里写得很简单,因为希望能够理解。 - gagro
@gagro:最终编辑是否改变了你的问题 - 或者你真的想要所有字符都被下划线而不是原来的一些“上划线”? - PaulF
6个回答

8

首先需要输出数值,然后再输出破折号:

Console.WriteLine(string.Join("", a)); // make a string of all values and write a line end
Console.WriteLine(string.Join("", a.Select(v => "-"))); // write the dashes

[Ideone]


我理解你的意思,但是由于 if else 语句的存在,我不能这样做。我已经修改了代码,现在更好地描述了我的意图。 - gagro
2
这与您之前的问题完全不同。请提出一个新问题,并在其中加入条件。如果不完全重写所有答案,就无法回答新问题。 - Patrick Hofman
@PatrickHofman和fubo,你们是对的,抱歉。我会发布一个新问题 :) - gagro

2

使用Concat的另一种方法:

char[] a = {'a','b','c','d'};
Console.WriteLine(string.Concat(a));
Console.WriteLine(new string('-',a.Length));

https://dotnetfiddle.net/IZdlX5


1
有两种方法。
第一种方法如上所述。总体思路是分别打印两行,以非常简单的方式给你完全相同的结果。
第二种方法是使用SetCursorPosition(int Left ,int Top)将光标位置设置在当前位置下方,然后写入'_',再将光标移回原位置。

0

你不需要“向上移动一行”。你需要先输出第一行,然后再输出第二行。因此,你需要先输出整个 a 数组,然后再输出一个与该数组长度相同的横线。可能像这样:

Console.WriteLine(string.Join("", a));
Console.WriteLine(string.Join("", a.Select(_ => "-")));

第一行将a数组的所有元素连接成一个字符串,第二行使用LINQ中的技巧来“查询”a数组,但返回连字符而不是该数组中的任何内容,然后以相同的方式输出。

0
你要找的是 Console.SetCursorPosition
var baseLine = Console.CursorTop;
char[] a = {'a', 'b', 'c', 'd'};
char[] b = {'A', 'B', 'C', 'D'};
string[] conditions = {"a", "a", "both", "b"}; // Which arrays to show
for (int i = 0; i < a.Length; i++)
{
    Console.SetCursorPosition(i, baseLine);
    Console.Write(conditions[i] != "b" ? a[i] : '-');
    Console.SetCursorPosition(i, baseLine + 1);
    Console.Write(conditions[i] != "a" ? b[i] : '-');
}

baseLine是必需的,因为您不知道从哪一行开始。

输出:

abc-
--CD

请注意,在原问题中,OP想要在某些字符下方添加破折号,而在另一些字符上方添加破折号。 - PaulF
我看到他有一些条件和一些if-else语句。 - vyrp

0

Linq 一行代码:

Console.Write(String.Concat(a) + "\n" + new String('-', a.Length));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接