Member 9346617 Ответов: 2

Консоль завершается после console. read (), даже с console.readline() в конце


Следующий код запрашивает ваше имя и фамилию.

class Program
{
        static void Main(string[] args)
        {
            Console.Write("Enter your name: ");
            string s = Console.ReadLine();
            Console.WriteLine("Your name: " + s);
            Console.Write("Enter your surname: ");
            int r = Console.Read();
            Console.WriteLine("Your surname: " + r);

            Console.ReadLine();
        }
}

После ввода имени программа успешно отобразит ваш ввод. Однако после ввода фамилии программа немедленно останавливается. Насколько я понимаю, утешение.Read () должен возвращать значение int первого символа вводимой строки (ASCII-код?).

Почему программа завершается сразу после консоли?Читать()? Не стоит утешать.ReadLine () гарантирует, что программа остается открытой?

Что я уже пробовал:

если я использую строку r = Console.Линия чтения();
тогда это работает хорошо.

[no name]

Поймайте исключение, которое вы получаете, и посмотрите, что оно говорит.

Jon McKee

Не исключение, это причуда Read (), если вам было любопытно :)

ZurdoDev

Большое сообщение об ошибке, которое вы получите, ответит на ваш вопрос.

Jon McKee

Нет никакого сообщения об ошибке. Это причуда Read() и почему MSDN рекомендует больше не использовать его :)

ZurdoDev

ОК

2 Ответов

Рейтинг:
4

Jon McKee

Console.Read() принимает значения во входной поток до тех пор, пока не будет нажата клавиша Enter. Каждый последующий вызов Console.Read() читает а одиночный символ из этого ввода. Console.ReadLine() извлекает полную строку из входного потока. Ты видишь, что происходит?

Если вы наберете "XYZ" и нажмете Enter в Console.Read() у вас есть "YZ & lt;enter>" во входном потоке с r установите значение X. Затем Console.ReadLine() поднимает оставшееся "YZ & lt;enter>" и программа завершается. Именно из-за этой причуды MSDN рекомендует не использовать Console.Read() способствующий Console.ReadLine() и Console.ReadKey() вместо.

Это легко продемонстрировать с помощью следующего кода:

int r = Console.Read();
Console.WriteLine(Console.ReadLine());
Console.ReadKey();

Набрав "XYZ", а затем Enter, вы получите следующий результат:
XYZ
YZ


Рейтинг:
15

Narud Shiro

Ваша программа не остается открытой, потому что последняя консоль.ReadLine () принимает [Enter], который вы нажали на консоли.Читать инструкции.

Возможно, вы захотите использовать ReadKey() вместо Read() для достижения желаемой функциональности.

Console.Write("Enter your name: ");
string s = Console.ReadLine();
Console.WriteLine("Your name: " + s);
Console.Write("Enter your surname: ");
string r = Console.ReadKey(false).KeyChar.ToString();
Console.WriteLine();
Console.WriteLine("Your surname: " + r);
Console.WriteLine("Press any key to continue...");

Console.ReadKey(true);


С наилучшими пожеланиями!