0

Я довольно новичок в C# и пишу просто консольное приложение как практику. Я хочу, чтобы приложение задавало вопрос, и только переход к следующему фрагменту кода, когда пользовательский ввод равен 'y' или 'n'. Вот что я до сих пор.C# loop до Console.ReadLine = 'y' или 'n'

 static void Main(string[] args) 
    { 

     string userInput; 
     do 
     { 
      Console.WriteLine("Type something: "); 
      userInput = Console.ReadLine(); 
     } while (string.IsNullOrEmpty(userInput)); 

     Console.WriteLine("You typed " + userInput); 
     Console.ReadLine(); 

     string wantCount; 
     do 
     { 
      Console.WriteLine("Do you want me to count the characters present? Yes (y) or No (n): "); 
      wantCount = Console.ReadLine(); 
      string wantCountLower = wantCount.ToLower(); 
     } while ((wantCountLower != 'y') || (wantCountLower != 'n')); 


    } 

У меня возникли проблемы с string wantCount; года. То, что я хочу сделать, - спросить пользователя, хотят ли они подсчитать символы в своей строке и задать этот вопрос до тех пор, пока не будет введен ни «y», ни «n» (без кавычек).

Обратите внимание, что я также хочу использовать верхний/нижний регистр, поэтому я хочу, чтобы преобразовать строку wantCount в нижнюю часть - я знаю, что как у меня в настоящее время это не будет работать, поскольку я устанавливаю string wantCountLower внутри цикл, поэтому я не могу ссылаться за пределами цикла в предложении while.

Можете ли вы помочь мне понять, как я могу достичь этой логики?

+1

'wantCountLower' определяется внутри области do-while, поэтому он недоступен снаружи. Вы должны определить его перед циклом (или, лучше, используйте сравнение без учета регистра). – Luaan

+0

Я думаю, вам нужно правильно прочитать, как работает синтаксис while – Takarii

+1

'' y'' является обозначением для символа, который вам нужен '' y "' для проверки строки. – prof1990

ответ

2

вы можете переместить проверку ввода, чтобы внутри цикла и использовать break для выхода. Обратите внимание, что логика, которую вы использовали, всегда будет оцениваться до true, поэтому я перевернул условие, а также изменил ваше сравнение char на string.

string wantCount; 
do 
{ 
    Console.WriteLine("Do you want me to count the characters present? Yes (y) or No (n): "); 
    wantCount = Console.ReadLine(); 
    var wantCountLower = wantCount?.ToLower(); 
    if ((wantCountLower == "y") || (wantCountLower == "n")) 
     break; 
} while (true); 

отметить также нулевой условный оператор (?.) перед ToLower(). Это гарантирует, что NullReferenceException не будет выброшен, если ничего не будет введено.

+0

Было несколько хороших ответов, которые работают, но я думаю, что это то, что я искал - это лучше всего подходит для того, что я пытался достичь. Спасибо за вашу помощь. – Klicker

0

Если вы хотите сравнить характер, то их не нужно для ReadLine вы можете использовать ReadKey для этого, если ваше состояние заключается в следующем: while ((wantCountLower != 'y') || (wantCountLower != 'n')); ваш цикл будет бесконечным один, так что вы можете использовать && вместо этого для || здесь или это будет while(wantCount!= 'n') так, что она будет петли, пока вы не нажмете n

char charYesOrNo; 
do 
{ 
    charYesOrNo = Console.ReadKey().KeyChar; 
    // do your stuff here 
}while(char.ToLower(charYesOrNo) != 'n');