Українська
Консольне введення та виведення
Консольне введення та виведення
Для роботи з консоллю призначений клас Console (https://learn.microsoft.com/dotnet/api/system.console):
Console.Write(value)– виводить значення без переходу на новий рядок;Console.WriteLine(value)– виводить значення і переходить на новий рядок;Console.ReadLine()– зчитує рядок, введений користувачем, і повертає його якstring?(значенняnull, якщо введення завершено);Console.ReadKey()– чекає натискання однієї клавіші;Console.Clear()– очищує вікно консолі.
Перетворення введених даних
Метод ReadLine завжди повертає рядок, тому для отримання числа рядок потрібно перетворити. Метод int.Parse генерує виняток FormatException, якщо рядок не є числом, а int.TryParse повертає логічне значення успіху й записує результат у вихідний параметр:
cs
Console.OutputEncoding = System.Text.Encoding.UTF8;
Console.Write("Введіть рік народження: ");
string? input = Console.ReadLine();
if (int.TryParse(input, out int year))
{
int age = DateTime.Now.Year - year;
Console.WriteLine($"Цього року вам буде {age} р.");
}
else
{
Console.WriteLine("Некоректне значення.");
}Для дійсних чисел аналогічно використовують double.Parse і double.TryParse, а для грошових сум – тип decimal і методи decimal.Parse, decimal.TryParse. Десятковий роздільник залежить від регіональних налаштувань системи: для української мови це кома (12,5), для англійської – крапка (12.5). Тому програма, яка очікує 12,5, на комп’ютері з англійськими налаштуваннями не прийме таке значення.
Форматоване виведення
Для форматованого виведення зручно використовувати інтерпольовані рядки зі знаком $: вираз у фігурних дужках обчислюється та вставляється в рядок, а після двокрапки можна задати формат (табл. 1.5):
cs
double price = 1234.5;
// Виведе: Ціна: 1234,50 грн
Console.WriteLine($"Ціна: {price:F2} грн");Таблиця 1.5. Специфікатори формату чисел
| Формат | Приклад | Результат для 1234,567 |
|---|---|---|
F2 | {x:F2} | 1234,57 – фіксована кількість знаків після коми |
N2 | {x:N2} | 1 234,57 – з розділенням груп розрядів |
E2 | {x:E2} | 1,23E+003 – експоненційний запис |
C | {x:C} | 1 234,57 ₴ – грошовий формат |
P1 | {0.25:P1} | 25,0% – відсотки (без пробілу перед знаком %) |
,10 | {x,10:F1} | вирівнювання праворуч у полі шириною 10 символів |
,-10 | {s,-10} | вирівнювання ліворуч у полі шириною 10 символів |
Усі стандартні специфікатори формату чисел описано в документації https://learn.microsoft.com/dotnet/standard/base-types/standard-numeric-format-strings. Дату й час форматують так само: {date:dd.MM.yyyy} виводить дату, {date:HH:mm} – час (https://learn.microsoft.com/dotnet/standard/base-types/custom-date-and-time-format-strings).
У рядках можна використовувати керувальні послідовності: \n – новий рядок, \t – табуляція, \" – лапки, \\ – зворотна скісна риска. У рядку з префіксом @ (@"C:\Temp") зворотна скісна риска не має спеціального значення, що зручно для шляхів до файлів.
Кодування UTF-8
Щоб у консолі Windows коректно відображалися й вводилися українські літери, на початку програми встановлюють кодування UTF-8:
cs
Console.OutputEncoding = System.Text.Encoding.UTF8;
Console.InputEncoding = System.Text.Encoding.UTF8;Колір тексту змінює властивість Console.ForegroundColor, наприклад Console.ForegroundColor = ConsoleColor.Red;, а метод Console.ResetColor() відновлює стандартні кольори. Не передавайте важливу інформацію лише кольором: у різних темах терміналу кольори виглядають по-різному.
Приклади програм
Конвертер температури
Програма запитує температуру за шкалою Цельсія й переводить її у шкали Фаренгейта та Кельвіна. Якщо користувач ввів не число, запит повторюється.
cs
Console.OutputEncoding = System.Text.Encoding.UTF8;
double celsius = ReadNumber("Температура за Цельсієм: ");
double fahrenheit = celsius * 9 / 5 + 32;
double kelvin = celsius + 273.15;
Console.WriteLine($"За Фаренгейтом: {fahrenheit:F1} °F");
Console.WriteLine($"За Кельвіном: {kelvin:F2} K");
// Повторює запит, доки користувач не введе число.
static double ReadNumber(string prompt)
{
while (true)
{
Console.Write(prompt);
string? input = Console.ReadLine();
if (double.TryParse(input, out double value))
{
return value;
}
Console.WriteLine("Це не число, спробуйте ще раз.");
}
}Повторюване зчитування винесено в локальну функцію ReadNumber; цикл while (true) завершується оператором return, щойно введено число. Приклад роботи програми (користувач ввів abc і -12,5):
Температура за Цельсієм: abc
Це не число, спробуйте ще раз.
Температура за Цельсієм: -12,5
За Фаренгейтом: 9,5 °F
За Кельвіном: 260,65 KЧек покупки
Програма зчитує назву товару, ціну та кількість і виводить чек у вигляді вирівняної таблиці. Для грошових сум використовується тип decimal, який зберігає десяткові дроби без похибок округлення; суфікс m позначає літерал типу decimal.
cs
Console.OutputEncoding = System.Text.Encoding.UTF8;
Console.InputEncoding = System.Text.Encoding.UTF8;
Console.Write("Назва товару: ");
string name = Console.ReadLine() ?? "";
Console.Write("Ціна за одиницю, грн: ");
decimal price = decimal.Parse(Console.ReadLine() ?? "0");
Console.Write("Кількість: ");
int count = int.Parse(Console.ReadLine() ?? "0");
decimal total = price * count;
decimal vat = total * 0.2m / 1.2m; // ПДВ 20 % у складі ціни
string line = new string('-', 38);
Console.WriteLine();
Console.WriteLine($"{"Товар",-20}{"К-сть",6}{"Сума",12}");
Console.WriteLine(line);
Console.WriteLine($"{name,-20}{count,6}{total,12:N2}");
Console.WriteLine(line);
Console.WriteLine($"{"Разом до сплати:",-26}{total,12:N2}");
Console.WriteLine($"{"у т. ч. ПДВ:",-26}{vat,12:N2}");Операція ?? підставляє порожній рядок або "0", якщо ReadLine повернув null. Від’ємна ширина поля (-20) вирівнює текст ліворуч, додатна (6, 12) – праворуч. Результат:
Назва товару: Навушники
Ціна за одиницю, грн: 1299,50
Кількість: 2
Товар К-сть Сума
--------------------------------------
Навушники 2 2 599,00
--------------------------------------
Разом до сплати: 2 599,00
у т. ч. ПДВ: 433,17Час у дорозі
Програма обчислює, скільки годин і хвилин триватиме поїздка, та орієнтовний час прибуття.
cs
Console.OutputEncoding = System.Text.Encoding.UTF8;
Console.Write("Відстань, км: ");
int distance = int.Parse(Console.ReadLine() ?? "0");
Console.Write("Середня швидкість, км/год: ");
int speed = int.Parse(Console.ReadLine() ?? "0");
int totalMinutes = distance * 60 / speed; // ціле ділення
int hours = totalMinutes / 60;
int minutes = totalMinutes % 60; // остача від ділення
DateTime arrival = DateTime.Now.AddMinutes(totalMinutes);
Console.WriteLine($"Час у дорозі: {hours} год {minutes} хв");
Console.WriteLine($"Прибуття приблизно о {arrival:HH:mm}");Ділення цілих чисел відкидає дробову частину, а операція % повертає остачу, тому 331 хвилина – це 5 годин і 31 хвилина. Метод AddMinutes додає хвилини до поточного часу. Результат (час прибуття залежить від часу запуску):
Відстань, км: 470
Середня швидкість, км/год: 85
Час у дорозі: 5 год 31 хв
Прибуття приблизно о 16:45Завдання для самоперевірки
Що станеться, якщо ввести швидкість 0? Змініть програму так, щоб вона повідомляла про некоректну швидкість, використавши int.TryParse і перевірку speed > 0.