C#。 Console.ReadLine() 用于两个不同的对象

C#. Console.ReadLine() for two different obejcts

我正在学习 C#,对这个主题还很陌生。目前,我正在开发一个小型控制台应用程序(只是做一些任务来加强我的知识)战舰游戏。我想指定两个名字:Player 1 和 Player 2.

问题是:我可以使用一个 reader 而不是两个来分配不同的名称吗?我尝试使用一个 reader,但它为两个玩家分配了一个名字。

这是我的代码:

public void StartGame(Game game)
        {
            if (game.GameStage == GameStage.Start)
            {
                Console.WriteLine("Welcome to Battleship 2020.");
                Console.WriteLine("Player 1 enter your name:");

                var reader1 = Console.ReadLine();
                Player player1 = new Player();
                player1.Name = reader1;

                Console.WriteLine($"Welcome {player1.Name}");

                Console.WriteLine("Player 2 enter your name:");
                Player player2 = new Player();
                var reader2 = Console.ReadLine();
                player2.Name = reader2;

                Console.WriteLine($"Welcome {player2.Name}");
            }
        }

如果你想一次读取两个玩家名字,(你可以先提示用户)并告诉他们输入玩家名字逗号或 space 分隔,然后在读取玩家名字后自己将它们分开

 var reader = Console.ReadLine();
 var playerNames = reader.Split(' '); // payerNames[0], playerNames[1] contains player names

如果您的意思只是重用 reader 变量。您可以随时使用它,但第一次需要声明它。

 var reader = Console.ReadLine();
 ...
 reader = Console.ReadLine();
 ...
 reader = Console.ReadLine();

你可以像这样把它放在一个循环中:

for(int i = 0; i < 2; i++)
{
    var reader = Console.ReadLine();
    ...
}

如果要确保没有输入空值,可以使用do...while并循环直到设置有效值。 (重试空值或无效值):

for(int i = 0; i < 2; i++)
{
    do
    {
        player[i] = Console.ReadLine();
    } while(player[i].Trim() != "");
}

Console.ReadLine() 没有 return 任何“reader”。它只是 returns String 对象,其中包含从控制台输入中获取的文本。
方法名称中的 line 表示它将读取输入中可用的所有内容,直到遇到换行符。
如果没有换行符,它将永远等待,直到用户按下“enter”键。 如果缓冲区中有很多文本行,则需要多次调用ReadLine()

您可以直接指定玩家名称:

 player1.Name = Console.ReadLine();