1. Введение
До этого момента мы писали программы, которые были похожи на радио: они что-то сообщали, но никак не реагировали на ваши слова. Конечно, так далеко не уедешь! Цель большинства программ — сделать что-то полезное для пользователя. Поэтому очень часто нужно, чтобы пользователь мог вводить данные с клавиатуры.
Например:
- Калькулятор ожидает, что вы введёте числа и операцию.
- Формы на сайте ждут ваши ФИО, e-mail и почту, чтобы обработать заявку.
- Компьютерные игры спрашивают имя игрока.
Сегодня мы дадим нашему приложению микрофон! Ну или уши, кому как нравится :) Готовы? Поехали.
2. Знакомство с Console.ReadLine()
Console.ReadLine() — это функция (или "команда"), позволяющая программе получить данные, которые пользователь введет на клавиатуре.
Когда выполнение программы доходит до команды Console.ReadLine(), программа останавливается и… терпеливо ждёт, пока вы не напечатаете что-то и не нажмёте Enter. Всё, что вы введёте до нажатия Enter, будет считаться одной строкой текста. Эта строка возвращается в программу — как будто пользователь передал вам записку через окошко.
Базовый пример
// Спросим пользователя имя и поприветствуем его
Console.WriteLine("Как тебя зовут?");
string userName = Console.ReadLine(); // Здесь программа ждёт ввода!
Console.WriteLine("Привет, " + userName + "!");
Как это работает:
- На экране появляется: Как тебя зовут?
- Вы вводите, например, Андрей и нажимаете Enter.
- Переменная userName получает значение "Андрей".
- На экран выводится: Привет, Андрей!
Сразу замечание: всё, что возвращает Console.ReadLine() — ВСЕГДА строка (тип string). Даже если пользователь ввёл число, оно всё равно будет строкой!
3. Примеры
Давайте посмотрим, как используется Console.ReadLine() на практике.
Пример 1: вводим имя пользователя
Console.WriteLine("Введите ваше имя:");
string name = Console.ReadLine();
Console.WriteLine("Добро пожаловать, " + name + "!");
Пример 2: выводим результат в одной строке
С помощью оператора + вы можете сразу объединить текст и результат ввода.
Console.Write("Ваш любимый цвет: ");
string color = Console.ReadLine();
Console.WriteLine("Круто! Ваш любимый цвет - " + color + ".");
в этом примере используется Console.Write (без перехода на новую строку), чтобы ввод пользователя шел сразу после вопроса.
Пример 3: несколько вводов подряд
Давайте создадим мини-анкету:
Console.Write("Как вас зовут? ");
string name = Console.ReadLine();
Console.Write("Сколько вам лет? ");
string age = Console.ReadLine(); // пока как строка
Console.WriteLine("Вас зовут " + name + ", и вам " + age + " лет.");
Вы увидите:
Как вас зовут? Вика
Сколько вам лет? 23
Вас зовут Вика, и вам 23 лет.
4. Ввод числовых данных: конвертация
Здесь кроется популярная ловушка для новичков! Console.ReadLine() всегда возвращает строку, даже если пользователь ввёл 123.
Если вы хотите получить число, необходимо превратить строку в нужный числовой тип (например, int). Для этого в C# используют методы преобразования, например, int.Parse() или Convert.ToInt32() — мы уже говорили об этом в прошлой лекции.
Пример: спрашиваем возраст
Console.Write("Сколько вам лет? ");
string input = Console.ReadLine(); // input = "27", например
int age = int.Parse(input); // Превращаем строку "27" в число 27
Console.WriteLine("Через год вам будет " + (age + 1));
если пользователь введёт не число, программа выбросит ошибку (FormatException). Позже мы научимся делать более надёжный код, но для простых экспериментов этого достаточно.
5. Ошибки, с которыми вы точно столкнётесь
Забыли преобразовать к числу:
Попытка использовать значение из Console.ReadLine() как число без преобразования.
string input = Console.ReadLine();
int sum = input + 5; // Ошибка! Строку нельзя складывать с числом.
Нужно преобразовать в int:
int sum = int.Parse(input) + 5;
Забыли объявить переменную:
name = Console.ReadLine(); // Ошибка! Не объявлена переменная name.
Надо сначала объявить: string name = Console.ReadLine();
Перепутан порядок ввода и вывода:
Новички часто делают нелепые ошибки. Но профессионалы тоже их делают. Просто с умными лицами :)
string name = Console.ReadLine();
Console.WriteLine("Введите имя: " + name); // Сначала надо спросить, потом прочитать!
Правильный порядок:
Console.Write("Введите имя: ");
string name = Console.ReadLine();
Console.WriteLine("Привет, " + name);
Полезное примечание
Даже если вы используете Console.ReadLine() без вывода вопроса (например, просто string x = Console.ReadLine();), программа будет ЖДАТЬ ввода. Но пользователь не поймёт, что именно нужно ввести! Поэтому всегда предлагайте ему чёткую подсказку с помощью Console.Write() или Console.WriteLine().
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ