如何在第一个 do while 循环后向用户提供不同的消息?

How to provide a different message to the user after the first do while loop?

所以我只是问用户他们的名字,如果用户认为它不正确,然后再问这个问题。但是在他们说错之后我想说"Apologies, what is the correct name?"。但是将它放在 do while 循环中会使它说第一次没有任何意义。我希望它在第一次错误输入后和每次输入错误后都说出来。

        string nameCorrect;
        string playerName;

        do
        {
            Console.WriteLine("What is your name?");
            playerName = Console.ReadLine();

            Console.WriteLine("Is {0} correct?", playerName);
            nameCorrect = Console.ReadLine();

        } while(nameCorrect == "No");

        if(nameCorrect == "Yes")
        {
            Console.WriteLine("Great, lets move on.");
        }



        Console.ReadKey();

如果您将提示存储在字符串变量中,您可以在第一次后更改它。只需确保您将更改置于条件中,这样您就不会在每次循环时都重建一个新的不可变字符串。

        string nameCorrect;
        string playerName;
        string namePrompt = "What is your name?";

        do
        {
            Console.WriteLine(namePrompt);
            if (namePrompt == "What is your name?") namePrompt = "Apologies, what is the correct name?"
            playerName = Console.ReadLine();

            Console.WriteLine("Is {0} correct?", playerName);
            nameCorrect = Console.ReadLine();

        } while(nameCorrect == "No");

        if(nameCorrect == "Yes")
        {
            Console.WriteLine("Great, lets move on.");
        }



        Console.ReadKey();

只需使用一个变量,您可以在第一次迭代后更新它:

string message = "What is your name?";
do
{
    Console.WriteLine(message);
    playerName = Console.ReadLine();

    Console.WriteLine("Is {0} correct?", playerName);
    nameCorrect = Console.ReadLine();

    message = "Apologies, what is the correct name?";
}
while (nameCorrect == "No");

只需记录他们尝试了多少次:

string nameCorrect;
string playerName;
int attempt = 0;

do
{
    Console.WriteLine(attempt > 0
        ? "Apologies, what is the correct name?"
        : "What is your name?");
    playerName = Console.ReadLine();

    Console.WriteLine("Is {0} correct?", playerName);
    nameCorrect = Console.ReadLine();

    attempt++;
} while(nameCorrect == "No");

if(nameCorrect == "Yes")
{
  Console.WriteLine("Great, lets move on.");
}

Console.ReadKey();
string nameQuestion = "What is your name?";
string name = string.Empty;
bool needName = true;

do {
   Console.WriteLine(nameQuestion);
   name = Console.ReadLine();
   Console.WriteLine($"Is {name} correct?");

   if (Console.ReadLine().ToLower().Equals("yes")) {
      needName = false;
   }
   else {
      nameQuestion = "Apologies, what is the correct name?";
   }
} while (needName);

Console.WriteLine("Great, lets move on.");
Console.ReadKey();