2013-06-18 3 views
0

Я пишу действительно глупую программу.first Console.ReadLine() сразу возвращается

Я понятия не имею, почему следующий код не будет работать:

static void Main(string[] args){ 
     <Some silly code> 
     Console.WriteLine("Please choose the lab you are working on:"); 
     int choose = Console.Read(); 
     <Some more silly code, including 1 Console.writeLine() call > 

     Console.WriteLine("Enter the DB server location"); 
     string DBServer = Console.ReadLine(); 
     Console.WriteLine("Enter the DB name"); 
     string DBName = Console.ReadLine(); 
    } 

Когда я запускаю программу, она никогда не ждет первого оператора ReadLine

string DBServer = Console.ReadLine(); 

Он печатает две строки немедленно

Enter the DB server location 
Enter the DB name 

А затем читает второй ReadLine string DBName = Console.ReadLine();

Когда я проверяю пользователя формы ввода, он действительно хорошо читает вторую, но первая строка выходит пустая.
Любые идеи?

ответ

3

Это потому, что вы используете Console.Read, который достигнет символа, но после него оставит возврат каретки. Который затем будет поднят на ReadLine.

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

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

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