Работа с пользовательским вводом в C#
![Работа с пользовательским вводом в C#](/images/articles/csharp-user-input.jpg)
Работа с пользовательским вводом - это базовая составляющая работы с программой. Благодаря ей возможно изменять поведение программы в ответ на внешние команды, вводимые пользователем, сохранять/редактировать/удалять данные и т.д.
Как получить вводимые пользователем в консоль данные в C#?
Ранее, в статьях посвященных C# Вы уже могли видеть такой вызов - Console.WriteLine() - выводящий в консоль некоторую, часто отладочную, информацию. Так вот у этого метода, есть противоположный метод, который считывает, вводимый пользователем текст из консоли, а затем этот текст обрабатывается каким-либо образом. Данный метод называется - Console.ReadLine().
В примере далее мы предоставим пользователю возможность ввести свое имя, которое будет сохранено в переменной uname. А затем просто напечатаем это имя обратно в консоль с некоторым дополнительным текстом.
// Пишем имя и нажимаем кнопку Enter
Console.WriteLine("Введите Ваше имя: ");
// считываем и сохраняем введенное пользователем имя в строковой переменной uname
string uname = Console.ReadLine();
// печатаем обратно на экране имя пользователя с некоторым опциональным текстом
// как видите конкатенация (соединения строк) в C# производится с помощью знака + (как и в Java и JavaScript)
Console.WriteLine("Здравствуйте, " + uname + "!");
Как считать число из консоли в C#?
Метод Console.ReadLine(), который мы использовали выше всегда возвращает строку, даже, если Вам нужно число, например. Но как же быть, если нам, например, понадобится получить возраст пользователя, который должен быть представлен числом?
Давайте, посмотрим на пример далее:
Console.WriteLine("Введите Ваш возвраст: "); // 1
// считываем и сохраняем введенный пользователем возраст в переменную
int uage = Console.ReadLine(); // 2
// печатаем возраст в консоль и получаем...
Console.WriteLine("Здравствуйте, Вам: " + uage); // 3
// ошибку - Невозможно неявно преобразовать тип 'string' в 'int'на строке 2
Причина в том, что язык C# - язык со строгой статической типизацией, поэтому чтобы получить число из строки, нам необходимо самостоятельно преобразовать строку в число. Для этого в C# есть встроенный класс Convert, который содержит методы для явного преобразования типов.
Итак, посмотрим, как получить числовое представление возраста пользователя из строки ввода:
Console.WriteLine("Введите Ваш возраст: "); // 1
// считываем и сохраняем введенный пользователем возраст в переменную, предварительно преобразовав ее в число
int uage = Convert.ToInt32(Console.ReadLine()); // 2
// печатаем возраст в консоль
Console.WriteLine("Здравствуйте, Вам: " + uage); // 3
В примере выше код сработает как ожидается, однако если вместо числа будет введена строка, то будет брошено исключение System.FormatException, сигнализирующее о том, что введенное значение некорректно.
Об исключениях в C# мы поговорим в следующих статьях, а здесь просто рассмотрим пример, как можно обработать исключение, и вывести некоторое корректное значение без аварийного завершения программы:
Console.WriteLine("Введите Ваш возраст: "); // 1
// устанавливаем значение по умолчанию
int uage = 0;
try // пытаемся выполнить код, который может выбросить ошибку
{
// считываем и сохраняем введенный пользователем возраст в переменную, предварительно преобразовав ее в число
uage = Convert.ToInt32(Console.ReadLine()); // 2
}
catch (System.FormatException){} // если получили ошибку, то просто ничего не делаем, значение переменной uage - неизменно
// печатаем возраст в консоль
Console.WriteLine("Здравствуйте, Вам: " + uage); // 3
В примере выше, даже после ввода некорректного значения в консоли, программа продолжит работу.
Таким образом, работа с пользовательским вводом в C# - это один из базовых навыков, которым надо овладеть в первую очередь.
-
-
Михаил Русаков
Комментарии (1):
Михаил, в самом первом примере в этой строке Console.WriteLine("Здравствуйте, " + uname + "!"); я бы одиночные символы писал не в двойных кавычках, а одинарных. Вот пример: Console.WriteLine("Здравствуйте, " + uname + '!');
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.