C ++

Керування консоллю за допомогою класів iostream в C ++

Керування консоллю за допомогою класів iostream в C ++

Під час обчислень консоль - це клавіатура комп’ютера та монітор комп’ютера. Раніше вихідні дані надсилалися безпосередньо на екран монітора, а не у вікно, що відображається на моніторі. Для звичайного користувача комп'ютера сьогодні програми явно не використовують монітор. Ці програми використовують вікна, що відображаються на моніторі. Однак програмісту все ще потрібно використовувати екран монітора. Хоча програмісту все ще потрібно використовувати екран монітора, операційна система не дозволяє йому цього робити. Операційна система надає вікно, що імітує екран монітора. В операційній системі Windows це вікно називається командним рядком. В операційній системі Linux та її варіантах це вікно називається терміналом.

Очікується, що читач вже знає, як користуватися командним рядком або терміналом. У цій статті пояснюється, як читати символи та рядки з клавіатури та надсилати символи та рядки на термінал (або командний рядок). Кожен програміст на C ++ повинен знати в цій статті.

Для того, щоб мати вхід з клавіатури і виводити на термінал, програма повинна починатися з:

#включати
використання простору імен std;

Зміст статті

  • Вузькі потокові об'єкти стандарту iostream
  • Отримання символів та рядків з клавіатури
  • Відображення та видалення символів перед натисканням клавіші Enter
  • Надсилання символів і рядків на монітор
  • Аргументи для програми C ++
  • Висновок

Вузькі потокові об'єкти стандарту iostream

Клас iostream, стандартні об'єкти, cout, cin, cerr та clog, були інстанційовані і вже в стандартній бібліотеці. Програміст просто використовує їх, не створюючи їх знову.

кут

Наступне твердження функції main () надсилає текст: „Це вихід.”До терміналу:

кут << "This is output.";

cout - це вихідний об'єкт iostream у стандартній бібліотеці, вже створений у примірнику. << is the insertion operator, which sent the bytes, “This is output.” to the output stream object, cout. When the statement is executed, the text appears on the screen.

З наведеним вище твердженням, повторно відображений командний рядок з'являється праворуч від вихідної фрази. Він не переходить до наступного рядка. “Endl” у кінці наступного висловлювання переводить все, що друкується на екрані, до наступного рядка:

кут << "This is output." << endl;

"Endl" - це заздалегідь визначена змінна. Вміст екрану також можна перенести до наступного рядка за допомогою:

кут << "This is output." << '\n';

З використанням '\ n', всі рядки тексту все одно можуть не відображатися на екрані відразу. “Endl” виводить на екран повний рядок тексту.

Примітка: рядок, надісланий cout, містить подвійні лапки, тоді як надісланий символ - в одинарних лапках. Серія рядків і символів може бути надіслана в одному виписку, кожному з яких передує << . All that will appear in one line at the output if '\n' is not in the series.

cin

cin - це стандартний об'єкт вводу iostream, який уже створений і доступний у стандартній бібліотеці. Розглянемо такий сегмент коду у функції main ():

char txt [50];
кут << "Enter a word and press Enter:" <> txt;
кут << txt << endl;

Перший оператор оголошує порожній масив із 50 символів. Друге твердження вказує користувачеві ввести слово в наступному рядку екрана та натиснути клавішу Enter. Зверніть увагу на використання "endl", що змушує користувача вводити текст у наступному рядку екрана. Коли користувач набирає текст, введений текст відображається на екрані, коли він переходить у об’єкт cin. Після натискання клавіші Enter виконується третя операція в сегменті коду. Це третє твердження надсилає введений текст до змінної txt. Введений текст не повинен містити більше 50 символів. Зверніть увагу на використання оператора вилучення >>. Останнє твердження відображає введений текст на екрані.

cin може взяти з клавіатури більше одного слова, розділеного пробілами. Ці слова доведеться виділити в різні змінні. Наступний сегмент коду ілюструє це:

char txt [20];
int it;
float ft;
кут << "Enter 3 values and press Enter:" <> txt >> it >> ft;
кут << txt << " << it << " << ft << endl;

Зверніть увагу на твердження:

cin >> txt >> it >> ft;

Перше слово витягується до txt, наступне до нього, а останнє до ft. Якщо введення було,

один 25 3.6

тоді висновок сегменту коду буде,

один 25 3.6

cerr

Наступна програма має помилку:

#включати
використання простору імен std;
int main ()

в myInt;
повернути 0;

Перше твердження в main () є неправильним. Якщо ім'я файлу, що має код, - “temp.cc ", а отриманий виконуваний файл буде називатися" temp ", тоді наступна команда g ++ надішле до файлу повідомлення про помилку компілятора," error.txt ”:

g ++ -o temp temp.cc 2> помилка.txt

Якщо файл “помилка.txt ”не існує, він би був створений. Зверніть увагу на частину “2> помилка.txt ”команди g ++.

Екран є стандартним призначенням виводу, а також стандартним призначенням помилок. Якщо “2> помилка.txt ”пропущено в команді g ++, тоді повідомлення про помилку компілятора буде надіслане до стандартного пункту призначення помилки, який все ще є екраном (монітором).

Об'єктом потоку, що представляє стандартний вихідний пункт призначення, є cout. Об'єктом потоку, що представляє стандартне призначення помилки, є cerr. Помилка виконання програми може бути надіслана на екран наступним чином:

cerr << "The error message!" << '\n';

засмічуватися

Додаток приймає різні входи в різний час. Всі входи можна повторно відобразити на екрані. Усі входи можна зберегти у файлі. Це реєстрація. Стандартним місцем реєстрації є екран. Стандартним об’єктом потоку реєстрації є засмічення. Наступний код повторно відобразить введений текст на екран:

char txt [50];
кут<<"Enter text and press Enter:"<>txt;
засмічуватися<Якщо введеним текстом є "input_text", тоді засмічення знову відображатиме "input_text" на екрані.

На практиці журналювання, як правило, перенаправляється у файл. Наступна програма це ілюструє:

#включати
використання простору імен std;
int main ()

freopen ("журнал.txt "," w ", stdout);
кут << "input_text" << endl;

Зверніть увагу на використання функції freopen () та її аргументи. Першим аргументом є ім'я файлу журналу. Якщо файл не існує, він буде створений. Другий аргумент - "w" для "write". Третім аргументом є stdout для стандартного виводу. Другий оператор у функції main () використовує cout для надсилання тексту журналу до файлу. Примітка: Фактичний код введення не відображався в цій програмі.

Отримання символів та рядків з клавіатури

Поки користувач набирає введення, символи надсилаються в буфер вхідного потоку і відображаються на екрані. Коли користувач натискає клавішу Enter, усі символи знаходяться в буфері; також курсор переходить на початок наступного рядка нижче, на екрані. Потім програма переходить до наступного твердження програми, після введення оператора зчитування.

Об'єкт cin має методи, якими займається цей розділ.

Читання першого символу

отримати (char_type & c):
Наступний сегмент коду показує, як прочитати перший символ із буфера вхідного потоку:

char ch;
кут << "Input text:" << endl;
cin.отримати (ch);
кут << ch << endl;

Перший оператор оголошує символ без присвоєння. Другий вислів говорить користувачеві ввести символ. Коли користувач вводить символ і натискає клавішу Enter, третій оператор копіює символ із буфера вхідного потоку у змінну ch.

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

get ():
get () без аргументу, повертає десятковий код ASCII. Розглянемо такий сегмент коду:

кут << "Input text:" << endl;
кут << cin.get() << endl;

Якщо введено "asdfg", тоді буде повернуто 97, що є десятковим кодом ASCII для "a".

отримати (char_type * s, streamsize n)

Після того, як користувач вводить фразу і натискає клавішу Enter, із буфера потоку cin може бути витягнута кількість символів, починаючи з першого. Можна використовувати наступний код:

char char [10];
кут << "Input text:" << endl;
cin.отримати (str, 10);
кут << str << endl;

Якщо вхідні дані - "чудові люди", то результат буде "великий чоловік", що складається з 9 символів, а не 10. Рядок NUL-символ (\ 0) займає десяту позицію в аргументі get. Отже, щоб мати 9 символів у str, його обсяг пам’яті повинен бути принаймні 10, а аргумент get () - 11. Якщо потрібен весь рядок введення, тоді номер зберігання рядків повинен бути принаймні кількістю набраних символів плюс 1. Отже, якщо для всього рядка набрано 12 символів, тоді число має бути 13 для розміру рядка (str) і 13 для аргументу get (). Зверніть увагу, що один пробіл зараховується як один символ.

отримати (char_type * s, streamsize n, char_type delim)
Можна виділити підрядок, відокремлений праворуч, першим появою певного символу або потоковим розміром підрядка, який коли-небудь приходить першим. Якщо вхідним текстом для наступного коду є «великі люди», тоді буде витягнуто «великий»:

char str [30];
кут << "Input text:" << endl;
cin.отримати (str, 6, 'o');
кут << str << endl;

Шоста позиція з самого початку - пробіл, і він обмежує виключно витягнуту підрядок. Шоста позиція стоїть на першому місці перед єдиним персонажем, "о". Зверніть увагу, що обсяг пам’яті для str може бути якомога більшим.

Якщо вхідним текстом для наступного коду є «чудові люди», тоді буде витягнуто «gr»:

char str [30];
кут << "Input text:" << endl;
cin.отримати (str, 10, 'e');
кут << str << endl;

Перша поява "е" постає першою перед десятою позицією.

Отримання всіх символів рядка

Після натискання клавіші Enter усі символи, введені в рядок, можна отримати, як показано в наступному коді:

кут << "Input text:" << endl;
в той час як (1)
char ch = (char) cin.get ();
кут << ch;
якщо (ch == '\ n')
перерва;

Кастинг із символом (char) перетворює кожне десяткове число у відповідний символ ASCII.

заглянути ()

Функції-члени get () не тільки читають наступний символ; вони видаляють його з буфера потоку. Однак функція-член peek () просто читає наступний символ (починаючи з першого), не вилучаючи його з буфера. У наступному коді кожен символ спочатку зчитується за допомогою функції peek () перед видаленням за допомогою функції get (). Все, що відбувається після натискання користувачем клавіші Enter:

кут << "Input text:" << endl;
в той час як (1)
char ch = (char) cin.заглянути ();
кут << ch;
cin.get ();
якщо (ch == '\ n')
перерва;

Якби наступні символи не були видалені методом get (), peek () читав би лише перший символ, і цикл буде повторюватися необмежено довго.

Відображення та видалення символів перед натисканням клавіші Enter

Зверніть увагу, що з об’єктом cin потрібно натиснути клавішу Enter, щоб почати діяти. Ну, можливо, символи відображатимуться під час набору та стирання перед натисканням клавіші Enter. Однак це означає взаємодію з операційною системою. Операційні системи відрізняються. Отже, це означає різне кодування для різних операційних систем. Тож ця тема заслуговує на зовсім інший підручник - див. Далі.

Надсилання символів і рядків на монітор

Об'єкт cout - це об'єкт потоку вихідних даних, який уже створений і присутній у стандартній бібліотеці C ++. cout - основний об'єкт, що використовується для надсилання символів і рядків на монітор. Це робиться за допомогою оператора вставки, << . With the cin object, the text is obtained line-by-line. With the cout object, the text is added onto the same line until '\n' or endl is encountered.

Вирази, що призводять до скалярів, можуть бути аргументами для оператора вставки. Оператор перетворює скаляр в текст і розміщує текст у потоці об'єктів cout. Коли текст надсилається на об'єкт cout, він зазвичай відображається на екрані (моніторі). Однак іноді він може з’явитися не відразу. Щоб накласти текст на екран, вставте спеціальне значення "endl" відразу після вставлення тексту. Це призведе до виведення тексту на екран та додавання нового рядка. Примітка: "\ n" просто додає новий рядок, але не змиває текст на екран.

Наступна програма показує, як надрукувати на екрані значення int, float та звичайного тексту:

#включати
використання простору імен std;
int main ()

int це = 5;
float ft = 63.5;
кут << "The " << it << " items cost $" << ft << " US." << endl;
повернути 0;

Результат:

5 предметів коштують 63 долари.5 США.

Наступна програма показує, як друкується рядок об'єкта, створеного з класу:

#включати
використання простору імен std;
struct St
char str [11] = "деякі слова";
obj;
int main ()

кут << obj.str << '\n';
повернути 0;

Результат - "кілька слів".

Аргументи для програми C ++

Виконання програми починається з функції main (). Функція main () насправді має два необов’язкові параметри. Синтаксис функції main () з необов’язковими параметрами:

int main (int argc, char * argv [argc])

повернути 0;

Припустимо, що ім'я виконуваного файлу C ++ - "temp". Припустимо, що аргументи, необхідні програмі з її середовища (операційної системи), набрані користувачем, є,

статті 3 книжкова ручка "великий будинок"

Тут є 5 аргументів: “статті”, “3”, “книга”, “ручка” та “великий будинок”

Кожен - це текст. Нумерованим аргументом програми є текст. Іншими словами, кожен аргумент є рядком. “Великий будинок” в лапках, оскільки це фраза. Командою терміналу для запуску цієї програми буде:

./ тимчасові статті 3 книжкова ручка "великий будинок"

Припускаючи, що файл temp знаходиться у домашньому каталозі. Зверніть увагу, що пробіли, а не коми розділяють аргументи.

Тепер у синтаксисі функції main () argc - це кількість аргументів програми плюс 1. У цьому випадку для програми є 5 аргументів. Отже, argc дорівнює 6. У синтаксисі argv [argc] - це масив покажчиків на рядки. Перше значення для цього масиву в argv [0] задається компілятором. Це вказівник на назву програмного файлу. Решта значень є вказівниками на аргументи програми в порядку введеного користувачем порядку. Розмір цього масиву - argc. У цьому випадку розмір становить 1 + 5 = 6.

Припустимо, що під час компіляції наступна програма називається temp:

#включати
використання простору імен std;
int main (int argc, char ** argv)

кут << argv[0] << ", " << argv[1] << ", " << argv[2] << ", " << argv[3] << ", " << argv[4] << ", " << argv[5] << endl;
повернути 0;

Тут зауважте, що масив "char * argv [argc]" був оголошений як "char ** argv".

Якщо ця програма запускається за допомогою команди терміналу,

./ тимчасові статті 3 книжкова ручка "великий будинок"

тоді результат буде:

./ темп, статті, 3, книга, ручка, великий будинок

Зверніть увагу, що шлях до каталогу був включений до імені виконуваного файлу.

Також зауважте, що під час запуску програми (виклик програми) значення для argc не надсилалося.

Висновок

Клас iostream має чотири важливі об’єкти: cout, cin, cerr та clog. cin є вхідним об'єктом, тоді як решта є вихідними об'єктами. Поки програма працює, вхід до програми відрізняється від того, коли програма повинна почати працювати. Коли програма запускається, вхід до програми об’єднується з командою для запуску програми, розділеною пробілами.

Встановіть найновіший емулятор Dolphin для Gamecube & Wii на Linux
Емулятор Dolphin дозволяє грати у вибрані вами ігри Gamecube та Wii на персональних комп’ютерах Linux (ПК). Будучи вільно доступним і відкритим ігров...
Як використовувати GameConqueror Cheat Engine в Linux
Стаття висвітлює посібник із використання механізму читів GameConqueror в Linux. Багато користувачів, які грають у ігри в Windows, часто використовуют...
Кращі емулятори ігрової консолі для Linux
У цій статті буде перелічено популярне програмне забезпечення для емуляції ігрової консолі, доступне для Linux. Емуляція - це рівень сумісності програ...