【问题标题】:Multiple lines input from console in c#在c#中从控制台输入多行
【发布时间】:2014-08-11 21:12:39
【问题描述】:

我正在尝试从控制台读取 c# 中的一些值,然后对其进行处理。但是我遇到了一个错误。

来自控制台的输入是:

Name:ABCD
School:Xyz
Marks:80
 //here the user enters a new line before entering new data again
Name:AB
School:Xyz
Marks:90
//new line again 
Name:AB
School:Xyz
Marks:90

等等。我事先不知道控制台输入的数量...如何检测到用户已停止输入并存储输入。

我尝试过使用

string line;
while((line=Console.ReadLine())!=null)
{
  //but here it seems to be an infinite loop 
}

任何建议

【问题讨论】:

    标签: c# input command-line console-application


    【解决方案1】:

    你可以这样做

    var input = Console.In.ReadToEnd();
    

    注意事项

    1. 您将一次获得完整的输入,而不是一行一行
    2. 用户必须使用 EOF 标记来指示输入的结束,在 Windows 系统上是 ^z(即 Ctrl+z)

    【讨论】:

      【解决方案2】:

      这更容易不是吗 示例:我将每一行的输入添加到列表中

              List<int> inA = new List<int>();
              var inp = Console.ReadLine();
              while (inp != string.Empty)
              {
                  inA.Add(Convert.ToInt32(inp));
                  inp = Console.ReadLine();
      
              }
      

      【讨论】:

      • 这已经有一个检查空值和空格的答案。从两年前开始。此外,OP 只是想正确终止循环;向数组添加元素只是添加不必要的代码,对问题来说是多余的。
      【解决方案3】:

      线永远不会是null,这就是为什么它是一个无限循环。您必须检查空字符串或特定值,例如字母q(用于退出)。我向您推荐以下内容。

      string line;
      do
      {
          //input code
      
          //Check for exit conditions
          line = Console.ReadLine();
      } while (!String.IsNullOrWhiteSpace(line) || line.ToLower() != "q");
      

      【讨论】:

        【解决方案4】:

        您无法隐含地知道用户已完成输入所有数据。您需要用户的一些明确输入来告诉您没有更多数据即将到来。

        【讨论】:

        • 请注意,“ReadLine 永远不会返回 null”并不完全正确 - 请查看我的答案中的 MSDN 链接。
        【解决方案5】:

        您的代码会查找“控制台输入结束”,即 Console.ReadLine 中所述的“Ctrl+Z”:

        如果在方法从控制台读取输入时按下 Ctrl+Z 字符,则该方法返回 null。这使用户能够在循环调用 ReadLine 方法时防止进一步的键盘输入。以下示例说明了这种情况。

        如果您正在寻找空字符串作为完成,请使用String.IsNullOrWhiteSpace

        string line;
        while(!String.IsNullOrWhiteSpace(line=Console.ReadLine()))
        {
          //but here it seems to be an infinite loop 
        }
        

        【讨论】:

        • 注意:你必须在 ctrl+z 之后点击返回按钮才能完成 ReadLine 命令
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多