Клас 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.