c#中控制台的多行输入

本文关键字:输入 控制台 | 更新日期: 2023-09-27 18:09:54

我正试图从控制台读取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#中控制台的多行输入

您的代码查找"控制台输入的结束",即"Ctrl+Z",如控制台所述。ReadLine:

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

如果您正在寻找空字符串作为完成使用string . isnullorwhitespace。

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

您无法隐式地知道用户已经完成了所有数据的输入。您需要一些用户的显式条目来告诉您没有更多的数据传入。

Line永远不会是null,这就是为什么它是一个无限循环。您必须检查空字符串或特定值,如字母q(表示退出)。我向你推荐以下方法。

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

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

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

你可以这样做

var input = Console.In.ReadToEnd();

警告

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