【问题标题】:How to make multiline input in C#?如何在 C# 中进行多行输入?
【发布时间】:2021-09-21 18:44:21
【问题描述】:

我对这样的 C++ 代码很感兴趣:

 while(getline(cin, n)) 

但我想在 C# 中执行此操作,但我不知道如何执行此类操作。我有10 行输入,它需要在一个字符串 中,但是使用Console.ReadLine() 它只会将我一行10 中保存到字符串中。我的字符串变量必须有10 行文本,

例如:

"first line of text\nsecond line\nthird". 

有没有办法像在 C++ 中那样做这样的事情?

【问题讨论】:

  • Console.ReadLine 没有问题。你剩下的代码是什么?您可能总是替换字符串的内容。
  • 如果它总是 10 行,那么 StringBuilder、for 循环和 ReadLine 将带您到达那里。
  • C# 终端 I/O(如 Java、C++、C、Python 等)使用 line-oriented I/O。这就是为什么 Console.Readline() 以它的方式工作的原因。您最好的选择可能只是一次 ReadLine() 一行,然后将各个行连接成一个字符串。

标签: c# .net console


【解决方案1】:

如果你想模仿getline(cin, n),可以尝试从stdin读取,即

using System.IO;

... 

// Read line by line from stdin
public static IEnumerable<string> ReadStdInLines() {
  using var reader = new StreamReader(Console.OpenStandardInput());

  for (string line = reader.ReadLine(); line != null; line = reader.ReadLine())
    yield return line;
}

例如:

using System.Linq;

...

string[] lines = ReadStdInLines()
  .Take(10) // at most 10 lines
  .ToArray();

【讨论】:

  • 感谢 Dmitry Bychenko
【解决方案2】:

尝试初始化一个新变量来指示要输入的行数。然后,在一个循环中,输入指定数量的新行。如果您不知道输入数据何时结束,那么您可以使用String.IsNullOrWhiteSpace 完成输入,它会检查您输入的最后一行是否为空,这样就完成了输入。 示例:

string line;
while(!String.IsNullOrWhiteSpace(line=Console.ReadLine())) {}

【讨论】:

  • 也检查这个问题link
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多