【问题标题】:Console two line output控制台两行输出
【发布时间】:2017-08-22 21:32:35
【问题描述】:

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

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

原来是这样的

a
-

现在我有更多的Console.Write(a[i+1] + "\n-"); 代码,它的输出是这样的

a
-b
-c
-d
-

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

abcd
----

【问题讨论】:

  • 你不能在 2 个循环中完成吗?第一个写所有字母,然后第二个写所有-
  • @vyrp 不,因为现在总是出现 dasher 价值不足的情况,它可能是相反的。因为理解所以这里写的简单
  • @gagro:最后的编辑改变了你的问题 - 还是你真的想要所有字符都加下划线 - 而不是原来的一些“过线”?

标签: c# console output


【解决方案1】:

你必须先输出值,然后是破折号:

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 语句,我不能这样做。我编辑了我的代码,所以现在它更好地描述了我想要的内容。
  • 这与您之前的问题完全不同。提出一个新问题并在那里输入条件。如果不完全重写所有答案,就不可能回答新问题。
  • @PatrickHofman 和 fubo,你是对的,对不起。我正在发布一个新问题:)
【解决方案2】:

Concat 的另一种方法:

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

https://dotnetfiddle.net/IZdlX5

【讨论】:

    【解决方案3】:

    他们有两种方式。
    上面提到了第一种方法。一般的想法是分别打印两行,以非常简单的方式为您提供与您想要的完全相同的结果。
    第二种方法是在当前位置的正下方使用 SetCursorPosition(int Left ,int Top) 和 Write('_') 设置光标位置,然后再次将光标移回。

    【讨论】:

      【解决方案4】:

      您不会“排队”。您输出第一行,然后输出第二行。所以首先你要输出你的整个a 数组,然后输出一行连字符作为该数组的长度。也许是这样的:

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

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

      【讨论】:

        【解决方案5】:

        一个带有 Linq 的班轮:

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

        【讨论】:

          【解决方案6】:

          你要找的是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 希望在某些字符下使用破折号,但在其他字符上方。
          • 我看到他有一些条件和一些if-else。
          猜你喜欢
          • 1970-01-01
          • 2015-01-05
          • 1970-01-01
          • 1970-01-01
          • 2020-06-05
          • 2015-04-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多