Стандартний ввід-вивід

Клас System::Console забезпечує підтримку стандартного вводу-висновку. Метод ReadLine класу System::Console зчитує уведену із клавіатури рядок як текстову.

String^ line = Console::ReadLine ();

Цей оператор читає повний вхідний рядок тексту, завершену натисканням клавіші <Enter>. Змінна line має тип String^ і зберігає посилання на рядок, що виходить у результаті виконання функції Console::ReadLine(). Символ ^, якому треба за ім'ям типу String, указує, що це - дескриптор (handle), що посилається на об'єкт типу String.

Прочитати окремий символ можна застосувавши для цього функцію Console::Read().

char ch = Console::Read();

Можна також прочитати натискання клавіші функцією Console::ReadKey ().

Функція Console::ReadKey () повертає натиснуту клавішу у вигляді об'єкта класу ConsoleKeyInfо, що являє собою клас типу значення, певний у просторі імен System. От оператор читання натиснутої клавіші:

ConsoleKeylnfо keyPress = Console::ReadKey(true);

Аргумент true функції ReadKey () придушує відображення натиснутої клавіші в командному рядку. Аргумент false (або відсутність аргументу) змушує функцію відображати символ натиснутої клавіші. Результат виконання функції зберігається в keyPress. Щоб ідентифікувати символ, що відповідає натиснутій клавіші (або клавішам), необхідно використати вираження keyPress.KeyChar. Таким чином, щоб вивести повідомлення, що показує символ натиснутої клавіші, потрібно скористатися наступним оператором:

Console::WriteLine(L"Натиснута клавіша відповідає символу: {0}", keyPress.KeyChar);

За допомогою методів Write й WriteLine класу System::Console на консоль виводиться текстовий рядок, і, говорячи про метод WriteLine, також символ нового рядка. Простіше всього уведення з консолі виконується шляхом зчитування в об'єкт string (Рядок) з наступним перетворенням у необхідний тип даних. Щоб виконати це перетворення можна використати методи Тоххх класу System::Convert.

У наступному прикладі такий метод використається для уведення з консолі температури в градусах Фаренгейта, перетворення текстового рядка в число, обчислення температури в градусах Цельсия й висновку на консоль значень температури в градусах Фаренгейта й Цельсия.

#include "stdafx.h"

using namespace System;

// Клас із методами для уведення значень із консолі

value class InputWrapper // клас "збирача сміття" InputWrapper

{

public:

// Уведення цілого числа

int getInt(String ^pprompt) // pprompt - підказка на екрані

{

Console::Write(pprompt); // Висновок на екран підказки

String ^pbuf = Console::ReadLine(); // Читання рядка із клавіатури

return Convert::ToInt32(pbuf); // Перетворення рядок-ціле число

}

// Уведення речовинного числа

double getDouble(String ^pprompt) // pprompt - підказка на екрані

{

Console::Write(pprompt); // Висновок на екран підказки

String ^pbuf = Console::ReadLine(); // Читання рядка із клавіатури

return Convert::ToDouble(pbuf); // Перетворення строка-вещест. число

}

// Уведення десяткового числа

Decimal getDecimal(String ^pprompt) // pprompt - підказка на екрані

{

Console::Write(pprompt); // Висновок на екран підказки

String ^pbuf = Console::ReadLine(); // Читання рядка із клавіатури

return Convert::ToDecimal(pbuf); // Перетворення строка-вещест. число

}

// Уведення рядка

String ^getString(String ^pprompt) // pprompt - підказка на екрані

{

Console::Write(pprompt); // Висновок на екран підказки

String ^pbuf = Console::ReadLine(); // Читання рядка із клавіатури

return pbuf;

};

}; // End of InputWrapper

 

// Головна програма

int main(array<System::String ^> ^args)

{

InputWrapper ^piw = gcnew InputWrapper; // об'єкт класу InputWrapper

int numTemp = piw->getInt("How many temp's? ") ; // Скільки вводимо температур?

for (int i = 0; i < numTemp; i++){

int fahr = piw->getInt("Temp. (Fahrenheit): "); // Фаренгейт

int celsius = (fahr - 32) * 5/9; // Цельсия

Console::WriteLine ("Fahrenheit = {0}", fahr.ToString()); // Висновок (по Фаренгейту)

Console::WriteLine("Celsius = {0}", celsius); // Висновок (по Цельсию)

}

return 0;

}

Помітимо, що першим аргументом методу WriteLine є форматирующая строка.

Наприклад, при першому виклику методу WriteLine форматирующая рядок має вигляд

"Fahrenheit={ 0} ",

де { 0} - заглушка, що вказує, що на це місце варто вставити другий аргумент WriteLine. Число, поміщене у фігурні дужки, визначає, який саме з наступних за форматирующей рядком аргументів варто вивести в зазначеному місці (природно, нумерація починається з нуля). У нашому прикладі це число - 0, тому що за форматирующей рядком треба тільки один аргумент. Аргументи, що підставляють, можуть бути декількох типів, включаючи рядки або впаковані значення, що й продемонстриро-вано в прикладі. Приведемо приклад роботи програми, у якому перетворення температур виробляється два рази:

 

У наступній програмі продемонстровано, як виводити дані в деяких форматах за допомогою методу WriteLine. Для цього застосовуються коди форматування. Щоб одержати більше докладну інформацію про коди форматування, використовуваних у методі WriteLine (співпадаючих, до речі, з кодами для методу string::Format варто звернутися до документації по .NET SDK.

#include "stdafx.h"

using namespace System;

void main(void)

{

Console::WriteLine("{0:C}\n{1:D}\n{2:E}\n{3:F}\n{4:G}\n{5:N}\n{6:X}",

100, // поле валюти (currency)

200, // десяткове число (decimal)

300, // експонента (exponent)

400, // з фіксованою крапкою (fixed point)

500, // загальний (general)

600, // число (number)

700// шестнадцатеричное (hexadecimal)

);

}

Будучи запущеної на виконання, програма виводить на екран наступний результат:

Таблиця 8.2.