C#
Console.ReadLine в C#: как считать текст и число
Console.ReadLine() читает строку из консоли. Это главный способ сделать первую C#-программу интерактивной: спросить имя, возраст, цену, количество, команду меню
Самый простой пример:
Console.Write("Введите имя: ");
string? name = Console.ReadLine();
Console.WriteLine($"Привет, {name}!");
Важно: ReadLine всегда возвращает текст. Даже если пользователь ввел 25, для программы это сначала строка "25". Чтобы получить число, строку нужно преобразовать
Считываем строку
Начнем с имени:
Console.Write("Как вас зовут? ");
string? name = Console.ReadLine();
Console.WriteLine($"Привет, {name}!");
Console.Write выводит текст без перехода на новую строку. Пользователь вводит значение рядом с вопросом. Console.ReadLine() ждет Enter и возвращает введенную строку
Почему тип string?, а не просто string? В современном C# включена nullable-проверка. Теоретически ReadLine может вернуть null, например если поток ввода закрыт. В обычной учебной консоли вы почти всегда получите строку, но компилятор честно предупреждает о возможном null
Для первых уроков можно написать так:
string name = Console.ReadLine() ?? "";
Если вдруг пришел null, в переменную попадет пустая строка
Считываем число через int.Parse
Попросим возраст:
Console.Write("Введите возраст: ");
string? input = Console.ReadLine();
int age = int.Parse(input!);
Console.WriteLine($"Через год вам будет {age + 1}");
int.Parse преобразует строку в целое число. Восклицательный знак после input говорит компилятору: «я понимаю, что тут может быть null, но сейчас считаю значение не null»
Проблема в том, что программа упадет, если пользователь введет не число:
Введите возраст: двадцать
В этом случае будет FormatException
Безопасный ввод через TryParse
Для реальных учебных примеров лучше использовать TryParse:
Console.Write("Введите возраст: ");
string? input = Console.ReadLine();
if (int.TryParse(input, out int age))
{
Console.WriteLine($"Через год вам будет {age + 1}");
}
else
{
Console.WriteLine("Возраст нужно вводить числом.");
}
TryParse не бросает исключение. Он возвращает true, если преобразование удалось, и false, если пользователь ввел неподходящий текст
out int age означает: если число получилось, положи его в переменную age
Ввод дробного числа
Для цены или веса нужен double или decimal
Console.Write("Введите цену: ");
string? input = Console.ReadLine();
if (decimal.TryParse(input, out decimal price))
{
Console.WriteLine($"Цена: {price}");
}
else
{
Console.WriteLine("Введите корректную цену.");
}
Для денег в C# чаще используют decimal, потому что он лучше подходит для финансовых расчетов. Для физики, графиков и обычных дробных учебных примеров часто используют double
Нюанс: в русской локали пользователь может вводить 10,5, а в англоязычной — 10.5. Если статья для новичков, лучше предупредить: формат дробного числа зависит от региональных настроек системы
Мини-проект: расчет заказа
Соберем небольшую программу: пользователь вводит название товара, количество и цену. Программа считает итог
Console.Write("Название товара: ");
string product = Console.ReadLine() ?? "Без названия";
Console.Write("Количество: ");
string? countInput = Console.ReadLine();
Console.Write("Цена: ");
string? priceInput = Console.ReadLine();
if (!int.TryParse(countInput, out int count))
{
Console.WriteLine("Количество нужно ввести целым числом.");
return;
}
if (!decimal.TryParse(priceInput, out decimal price))
{
Console.WriteLine("Цена должна быть числом.");
return;
}
decimal total = count * price;
Console.WriteLine();
Console.WriteLine("Заказ");
Console.WriteLine($"Товар: {product}");
Console.WriteLine($"Количество: {count}");
Console.WriteLine($"Цена: {price}");
Console.WriteLine($"Итого: {total}");
Здесь есть несколько важных приемов:
??задает значение по умолчанию;TryParseпроверяет ввод;returnзавершает программу при ошибке;- итог считается только после успешной проверки.
Как повторять ввод, пока пользователь не введет число
Иногда лучше не завершать программу, а спросить еще раз:
int count;
while (true)
{
Console.Write("Количество: ");
string? input = Console.ReadLine();
if (int.TryParse(input, out count) && count > 0)
{
break;
}
Console.WriteLine("Введите целое число больше нуля.");
}
Console.WriteLine($"Количество принято: {count}");
Такой цикл полезен для меню, калькуляторов и небольших консольных приложений
Частые ошибки
Пользователь ввел текст вместо числа. Используйте TryParse, а не Parse
Программа пропускает ввод. Обычно это встречается при смешивании разных способов чтения. В C# с ReadLine проблема появляется реже, чем в C++ с cin, но все равно проверяйте порядок команд
Компилятор ругается на null. Используйте string?, ?? "" или проверку:
if (string.IsNullOrWhiteSpace(name))
{
Console.WriteLine("Имя не введено.");
}
Дробные числа не читаются. Проверьте, какую десятичную запись ждет ваша система: 10,5 или 10.5
Частые вопросы
Почему Console.ReadLine возвращает строку?
Потому что консольный ввод приходит как текст. Программа не знает заранее, число это, имя, команда меню или пустая строка
Что лучше: Parse или TryParse?
Для учебного примера можно показать Parse, но для нормального ввода лучше TryParse. Пользователь может ошибиться, и программа не должна падать
Зачем нужен знак ! после ReadLine?
Он отключает предупреждение о возможном null. Использовать его стоит аккуратно. Для новичка часто понятнее Console.ReadLine() ?? ""
Что открыть дальше
Что почитать дальше по C#
Если нужен общий маршрут по теме, откройте рубрику C#. Для соседних задач пригодятся эти разборы:
- C# с нуля: первый проект через dotnet new
- Math.Round в C#: как округлить число до целого и до двух знаков
- Как положить в массив введенные числа C#
- Как установить .NET SDK для C#