2016-10-29 2 views
1

Вот мой код без базового 'использования' и пространства имен, static void main строк строки (не удалось скопировать его достаточно). Первый Console.Read(); работает нормально, я могу набрать мое имя, и оно написано хорошо, но второй Console.Read(); игнорируется. Я просто ничего не могу написать после первого Console.Read(); и до Console.ReadKey();Second Console.Read(); игнорируется

Любая помощь пожалуйста?

Console.WriteLine("Welcome to the game. What is your name?"); 
Console.Write("It's "); 
Console.Read(); 
Console.WriteLine("That sounds amazing! How old are you?"); 
Console.Write("I'm "); 
Console.Read(); 
Console.WriteLine("OK. You will be taught some basic mathematics. Get ready..."); 
Console.WriteLine("When you're ready, press any key!"); 
Console.ReadKey(); 
Console.Clear(); 
+0

Как это написание вашего имени? Как вы даже получаете свое имя? –

ответ

1

Попробуйте вместо этого использовать Console.ReadLine().

 Console.WriteLine("Welcome to the game. What is your name?"); 
     Console.Write("It's "); 
     var name = Console.ReadLine(); 
     Console.WriteLine($"Hello {name}, How old are you?"); 
     Console.Write("I'm "); 
     Console.ReadLine(); 
     Console.WriteLine("OK. You will be taught some basic mathematics. Get ready..."); 
     Console.WriteLine("When you're ready, press any key!"); 
     Console.ReadKey(); 
     Console.Clear(); 

Поскольку мой ответ был выбран, я хочу указать на Салиха Х., рассуждая о том, почему это происходит правильно. Console.Read читать только 1 символ из потока. Если было введено больше символов, в потоке было бы больше данных, поэтому в следующий раз, когда вызывается Console.Read(), он будет читать следующий символ в потоке из предыдущего ввода.

0

Я только что испытал это, и я вижу ту же функциональность, которую вы видите. Я не совсем уверен, почему он выходит сразу после нажатия возврата. Console.ReadLine() функционирует так, как я ожидал, что ваш код будет работать.

Я считаю, что в документации this указывается, что второй звонок Console.Read() немедленно прекращается.

Последующие вызовы метода Read получают ваш вход по одному символу за раз. После получения окончательного символа Read блокирует его возврат снова и цикл повторяется.

2

Метод Read блокирует его возврат при вводе вводимых символов; он завершается, когда вы нажимаете клавишу Enter.

Основное различие между Console.Read() и Console.ReadLine() что Console.Read() будет принимать только один символ из последовательности и Console.ReadLine() займет всю линию, так что в вашем случае, если вы делаете что-то вроде этого:

int x; 
Console.WriteLine("Welcome to the game. What is your name?"); 
Console.Write("It's "); 
x = Console.Read(); 
Console.WriteLine("Char: " + Convert.ToChar(x)+";"); 
x = Console.Read(); 
Console.WriteLine("Char: " + Convert.ToChar(x)+";"); 

Вы» ll заметим, что у вас есть только один символ, и поскольку вы ввели больше символов, ваш второй Console.Read() примет следующий символ из последовательности и вернет 2-го символа из вашего ввода, поэтому я думаю, вы должны использовать Console.ReadLine().

+0

Именно по этой причине это происходит. – WBuck

Смежные вопросы