Программа цикла, если пользователь вводит неверный ввод

#.net-core #c#-4.0

#.net-ядро #c#-4.0

Вопрос:

Я только начал изучать C#, и пока циклы сбивают меня с толку. В отличие от Java, где я могу использовать цикл while для зацикливания программы, если пользователь ввел неверный ввод, в C#он действует по-другому.

 using System;  namespace first {  class Program {  static void Main(string[] args) {  Console.WriteLine("Hi! What is your name");  string userName = Console.ReadLine();  Console.WriteLine("oh! you are:"   userName);  Console.WriteLine("let play a game");   string answer="Y";  while (answer == "Y") {  Random random = new Random();  int correntNumber = random.Next(1, 2);  int guess = 0;   Console.WriteLine("Guess a number");  while (guess != correntNumber) {  string userGuess = Console.ReadLine();   //validate input method 1  try {  guess = int.Parse(userGuess);  } catch (Exception e) {  Console.WriteLine("Invalid inout", e);  }   //validate input method 2  //if(!int.TryParse(userGuess, out guess)) {  // Console.WriteLine("invalid input");  //}   if (guess != correntNumber) {  Console.WriteLine("try again!");  }  }   Console.WriteLine("Yes! corrector");  Console.WriteLine("Play again?");   //string answer;  answer = Console.ReadLine().ToUpper();  if(answer == "Y") {  continue;  } else if (answer == "N") {  Console.WriteLine("bye");  return;  } else if (answer != "Y" || answer != "N") {  Console.WriteLine("y or n");  answer = Console.ReadLine().ToUpper();  continue;  }  }  }  } }  

Когда я ввожу значение, отличное от y или n,появляется сообщение «Консоль».WriteLine(«только Y или n»);, но игра перезапускается, хотя этого не должно быть.

Мне жаль, что это простой и довольно глупый вопрос, но я не могу точно указать, где я ошибаюсь.

Комментарии:

1. @cigien, спасибо, что заметили это, я изменился, но в моем последнем редактировании я не заметил, что вернул его.

Ответ №1:

проблема в том , что после печати пользователю сообщения «только y или n» вы принимаете ввод, но на самом деле ничего с ним не делаете, поэтому цикл просто перезапускается независимо от ввода, чтобы исправить эту проблему, вы можете заменить последнюю часть if этим кодом

 while(answer != 'Y' amp;amp; answer != 'N'){  Console.WriteLine("y or n only");  answer = Convert.ToChar(Console.ReadLine().ToUpper());  }  if(answer == 'Y')  {  continue;   }  else if(answer == 'N')  {  Console.WriteLine("goodbye");  return;  }  

поэтому после того, как вы прочитаете его первый вводный ответ на повторение или нет, вы проверяете, является ли это допустимым вводом или нет, и если это не так, вы продолжаете спрашивать его «только y или n», пока он не введет «Y» или «N», а затем вы обрабатываете этот ответ на то, является ли это «Y» или «N» в части «если».

Комментарии:

1. это было действительно полезно! Спасибо.