Консольний ввід та вивід

Вивід тексту

Отже, що ми можемо зробити для початку? Давайте почнемо з того, що напишемо програму, яка виводить якесь повідомлення.

Візьмемо попередню програму та трохи змінемо її:

#include <iostream>

int main()
{
    std::cout << "I am a hacker!";
}

У першому рядку ми підключили бібліотеку iostream. Бібліотеки містять у собі набір корисних та готових до використання функцій, типів даних, тощо. iostreamмістить засоби для вводу\виводу (в консоль і не тільки), які нам необхідні для того щоб вивести повідомлення.

У тілі функції main ми виводимо повідомлення:

  • std::cout - позначає, так званий, стандартний потік виводу (standard output, std out), тобто місце, куди програма виводить свої повідомлення (у нашому випадку це консоль).
  • "I am a hacker!" - повідомлення, яке ми виводимо. Усі текстові рядки в мові С++ пишуться у подвійних лапках. -<< - оператор (тобто дія, яку ми виконуємо) - у цьому випадку ми кажемо: “вивести!”. Щоб зрозуміти, що таке оператор, можна розглянути, наприклад, додавання двох чисел. 2 + 2 означає: до першої двійки додай другу. Тут + теж оператор. Тільки у нашому прикладі замість чисел - стандартний потік виводу та рядок тексту, а замість оператора + - це оператор << (який означає “вивести!”).

Не забудьте крапку з комою у кінці! Крапку з комою ставлять після інструкції (statement) (дуже грубо кажучи, наразі: інструкція - рядок програми, який виконує щось конкретне, надалі ми побачимо багато виключень з цього правила). Таким чином крапку з комою використовують для розділення інструкцій у програмі.

Деталі: простір імен std

Бібліотека iostream так само, як і інші, що входять до стандартних бібліотек мови С++, оголошує функції, типи данних та інші сутності у середині простору імен std.

Простір імен ми можемо зрозуміти на прикладі адреси будинку. Кожен будинок має номер, але говорити лише про номер безсенсовно, оскільки є багато інших вулиць, які мають будинки з таким самим номером. Ми можемо зрозуміти, про який саме будинок йдеться, лише отримавши його повну адресу. Так само, ми можемо створити свої функції та типи даних, які будуть називатися так же, як і визначені в стандартній бібліотеці С++. Щоб уникнути такої неоднозначності, все що є в стандартній бібліотеці є визначено в просторі імен std. Як в адресі ми маємо назву вулиці та номер будинку, так само і тут вказуємо простір імен спочатку (std), а вже потім - назву стандартного потока виводу (cout).

Іноді зручно казати, що усі речі, які ми використовуємо (але не визначили самі), знаходяться в заданому просторі імен (для економії, щоб не вказувати std:: кожен раз на початку). У такому разі це можна зробити наступним чином:

 #include <iostream>

 using namespace std;

 int main()
 {
    cout << "I am a hacker!";
 }

У прикладах, у цій книжці та на зібраннях PLLUG ми будемо завжди вказувати простір імен std явно, у навчальних цілях. На думку автора цей спосіб є корисним та більш виразним, а також запобігає виникненню конфліктів у великій програмі.

Ввід тексту

Аналогічно, ми можемо попросити користувача щось ввести у консолі. Напишемо програму, яка питає ім’я, а потім - вітається з користувачем:

#include <iostream>
#include <string>

int main()
{
    std::cout << "Please, enter your name:" << std::endl;

    std::string name;
    std::cin >> name;

    std::cout << "Hello, " << name << "!" << std::endl;
}

Тут ми вперше знайомимося зі змінними - сутностями, які надають доступ до даних у програмі. Змінна name зберігає введене ім’я користувача. Ця змінна є типу std::string (текстовий рядок). Датальніше змінні та типи данних ми продовжимо розглядати у наступному розділі.

Коментарі

Для того, щоб залишити в тексті програми власні коментарі (які не будуть компілюватися, а слугуватимуть лише підказкою для нас), ми можемо використати один зі способів:

  • Для коментарів, які продовжуються лише до кінця рядка використовують подвійний слеш: //
  • Для коментарів, які займатимуть кілька рядків: /* для початку та */ для кінця коментаря.

Наприклад:

int main()
{
   // Single line comment

   /* Multi
   line
   comment. */
}

Текст коментаря ігнорується компілятором та не впливає на зміст програми.