OOP Course
Сьогодні

Підрозділ 2.5

Консольне введення-виведення

Пояснює роботу з консоллю: Console.WriteLine, Console.Write, інтерполяцію рядків, зчитування введення і перетворення введених значень.

2.5. Консольне введення-виведення

Будь-яка програма, яка взаємодіє з користувачем, повинна вміти отримувати від нього дані і повертати результат. Найпростішим і найбільш доступним механізмом такої взаємодії є консоль — текстовий інтерфейс, у якому програма виводить рядки тексту і читає те, що вводить користувач з клавіатури. У C# для роботи з консоллю призначений статичний клас Console з простору імен System. Він надає методи для виведення даних (Write, WriteLine), отримання введення (ReadLine, ReadKey) та налаштування параметрів консольного вікна.

Консольне введення-виведення

Виведення даних на консоль

Основним методом виведення є Console.WriteLine. Він приймає значення довільного типу, перетворює його на рядок і виводить на консоль, після чого автоматично переходить на новий рядок. Саме тому кожен наступний виклик Console.WriteLine починає свій вивід з нового рядка.

Зверніть увагу: числові та логічні змінні передаються у Console.WriteLine через .ToString() — явне перетворення на рядок. Це корисна звичка, яка унаочнює, що відбувається перетворення типу, і усуває двозначність у деяких ситуаціях.

Console.Write — вивід без переходу на новий рядок

Якщо потрібно вивести кілька значень в одному рядку, не розриваючи його, застосовується метод Console.Write. Він діє так само, як Console.WriteLine, але не додає символ переходу на новий рядок після виводу. Наступне виведення продовжиться з того ж рядка, де завершилось попереднє.

Таке поєднання Write і WriteLine зручне, коли рядок формується з кількох шматків і перехід потрібен лише наприкінці.

Інтерполяція рядків

Коли потрібно вивести кілька змінних в одному реченні, вручну об'єднувати рядки методами Write незручно. Значно елегантнішим є механізм інтерполяції рядків, доступний починаючи з C# 6. Перед рядком ставиться символ $, а всередині рядка змінні або вирази вказуються у фігурних дужках {...}. Під час виконання компілятор підставляє значення замість кожної вставки.

У фігурні дужки можна вкладати не лише змінні, але й будь-які вирази: арифметичні операції, виклики методів, тернарні оператори. Компілятор обчислить вираз і вставить результат у рядок. Це робить інтерполяцію дуже потужним інструментом для формування повідомлень.

Форматні рядки з плейсхолдерами

Інший спосіб підставляти значення в рядок — складений формат (composite formatting). У рядку розміщуються числові плейсхолдери виду {0}, {1}, {2} і т. д., а після рядка через кому вказуються значення, які треба підставити замість них. Нумерація плейсхолдерів починається з нуля і відповідає порядку аргументів.

Важливо розуміти, що {0} замінюється першим аргументом після рядка, {1} — другим і так далі. Порядок у рядку та порядок аргументів можуть навіть відрізнятися: якщо написати {1} першим, то виведеться другий аргумент. Цей механізм корисний, коли один аргумент треба вивести в кількох місцях рядка — досить кількох посилань на той самий індекс.

Нині в сучасному C# перевага надається інтерполяції ($"..."), оскільки вона наочніша і надійніша — компілятор одразу бачить вирази всередині дужок і може повідомити про помилку. Складений формат залишається в мові для сумісності та деяких сценаріїв локалізації.

Зчитування даних з консолі

Для отримання введення від користувача призначений метод Console.ReadLine(). Він зупиняє виконання програми, очікуючи, доки користувач не натисне Enter, і повертає весь введений рядок як значення типу string?.

Зверніть увагу на тип string? — це рядок, який також може мати значення null. Метод Console.ReadLine() повертає null, коли потік введення закритий і зчитувати нічого. На практиці при звичайній роботі з клавіатурою null не виникає, але компілятор вимагає, щоб це було відображено в типі змінної. Детально про nullable-типи мова піде в наступних темах.

Зчитування числових даних

Метод Console.ReadLine() завжди повертає рядок — навіть якщо користувач ввів 42. Щоб отримати числове значення, рядок треба перетворити на відповідний тип. Для цього зручно використовувати методи класу Convert:

  • Convert.ToInt32(рядок) — перетворює рядок у ціле число int;
  • Convert.ToDouble(рядок) — перетворює у дробове число double;
  • Convert.ToDecimal(рядок) — перетворює у точне десяткове число decimal;
  • Convert.ToBoolean(рядок) — перетворює рядок "True" або "False" у bool.

Якщо користувач введе текст там, де очікується число, Convert.ToInt32 кине виняток FormatException. Тому у реальних програмах введення числових значень захищають конструкцією try-catch або методом int.TryParse — про них мова піде в наступних розділах.

Культура та роздільник дробової частини

Важливий нюанс при введенні дробових чисел: роздільник між цілою і дробовою частиною залежить від поточної культури операційної системи. В українській та більшості европейських культурах роздільником є кома (,), в американській — крапка (.). Якщо операційна система налаштована на українську культуру, а користувач вводить 1.5 з крапкою — Convert.ToDouble може видати помилку або неправильний результат. Розробнику важливо враховувати цю відмінність і або чітко документувати формат введення, або явно вказувати культуру при перетворенні.

Комплексний приклад: реєстрація пацієнта

Об'єднаємо отримані знання в одну програму, яка збирає дані про нового пацієнта:

Ця програма демонструє повний цикл взаємодії: запит до користувача через Console.Write, зчитування відповіді через Console.ReadLine, перетворення на потрібний тип і вивід підсумкового результату з форматуванням.

Розроблено Tomka Yurii · © 2026 ·