#.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. это было действительно полезно! Спасибо.