C ++

Управление консолью с помощью классов iostream в C ++

Управление консолью с помощью классов iostream в C ++

В вычислениях консоль - это компьютерная клавиатура и компьютерный монитор. Раньше вывод отправлялся непосредственно на экран монитора, а не в окно, отображаемое на мониторе. Для обычного пользователя компьютера современные приложения не используют монитор явно. Эти приложения используют окна, отображаемые на мониторе. Однако программисту все равно нужно использовать экран монитора. Хотя программисту все еще нужно использовать экран монитора, операционная система не позволяет ему это делать. В операционной системе есть окно, имитирующее экран монитора. В операционной системе Windows это окно называется командной строкой. В операционной системе Linux и ее вариантах это окно называется терминалом.

Ожидается, что читатель уже знает, как использовать командную строку или терминал. В этой статье объясняется, как читать символы и строки с клавиатуры и отправлять символы и строки в терминал (или командную строку). В этой статье каждый программист на C ++ должен знать.

Чтобы вводить данные с клавиатуры и выводить данные на терминал, программа должна начинаться с:

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

Содержание статьи

  • Объекты Narrow Stream стандартного iostream
  • Получение символов и строк с клавиатуры
  • Отображение и удаление символов перед нажатием Enter
  • Отправка символов и строк на монитор
  • Аргументы в пользу программы на C ++
  • Заключение

Объекты Narrow Stream стандартного iostream

Класс iostream, стандартные объекты cout, cin, cerr и clog созданы и уже находятся в стандартной библиотеке. Программист просто использует их, не создавая их снова.

cout

Следующий оператор в функции main () отправляет текст: «Это вывод.”На терминал:

cout << "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» в конце следующего оператора переведет все, что выводится на экран, на следующую строку:

cout << "This is output." << endl;

«Endl» - это предопределенная переменная. Содержимое экрана также можно перенести на следующую строку с помощью:

cout << "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];
cout << "Enter a word and press Enter:" <> текст;
cout << txt << endl;

Первый оператор объявляет пустой массив из 50 символов. Второй оператор инструктирует пользователя ввести слово в следующей строке экрана и нажать клавишу Enter. Обратите внимание на использование "endl", которое заставляет пользователя вводить текст в следующей строке экрана. По мере того, как пользователь вводит текст, введенный текст выводится эхом на экран, пока он переходит в объект cin. После нажатия Enter выполняется третья инструкция в сегменте кода. Этот третий оператор отправляет введенный текст в переменную txt. Вводимый текст в этом случае не должен быть длиннее 50 символов. Обратите внимание на использование оператора извлечения >>. Последняя инструкция отображает введенный текст на экране.

cin может брать с клавиатуры более одного слова, разделенного пробелами. Эти слова нужно будет извлечь в разные переменные. Следующий фрагмент кода иллюстрирует это:

char txt [20];
int it;
float ft;
cout << "Enter 3 values and press Enter:" <> txt >> it >> ft;
cout << 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.текст":

g ++ -o temp temp.cc 2> ошибка.текст

Если файл «ошибка».txt »не существует, он будет создан. Обратите внимание на часть «2> ошибка».txt »команды g ++.

Экран является стандартным местом назначения вывода, а также стандартным местом назначения ошибок. Если «2> ошибка».txt »не указывается в команде g ++, то сообщение об ошибке компилятора будет отправлено в стандартное место назначения ошибки, которым по-прежнему является экран (монитор).

Объект потока, представляющий стандартное место назначения вывода, - cout. Объект потока, представляющий стандартное место назначения ошибки, - cerr. Ошибка выполнения программы может быть отправлена ​​на экран следующим образом:

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

засорять

Приложение принимает разные входные данные в разное время. Все входы могут быть повторно отображены на экране. Все входные данные можно сохранить в файл. Это ведение журнала. Стандартным местом назначения журнала является экран. Стандартный объект потока журналирования - это засорение. Следующий код повторно отобразит введенный текст на экране:

char txt [50];
cout<<"Enter text and press Enter:"<>текст;
засорять<Если вводимый текст - "input_text", тогда clog будет повторно отображать "input_text" на экране.

На практике ведение журнала обычно перенаправляется в файл. Следующая программа иллюстрирует это:

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

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

Обратите внимание на использование функции freopen () и ее аргументов. Его первый аргумент - это имя файла журнала. Если файл не существует, он будет создан. Второй аргумент - "w" для "записи". Его третий аргумент - stdout для стандартного вывода. Второй оператор в функции main () использует cout для отправки текста журнала в файл. Примечание. Фактический код ввода не показан в этой программе.

Получение символов и строк с клавиатуры

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

У объекта cin есть методы, о которых идет речь в этом разделе.

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

получить (char_type & c):
Следующий сегмент кода показывает, как прочитать первый символ из буфера входного потока:

char ch;
cout << "Input text:" << endl;
cin.получить (ч);
cout << ch << endl;

Первый оператор объявляет символ без присваивания. Второй оператор говорит пользователю ввести символ. Когда пользователь вводит символ и нажимает клавишу Enter, третий оператор копирует символ из буфера входного потока в переменную ch.

Даже если пользователь ввел более одного символа, первый символ будет взят сегментом кода.

получать():
get () без аргумента возвращает десятичный код ASCII. Рассмотрим следующий фрагмент кода:

cout << "Input text:" << endl;
cout << cin.get() << endl;

Если введено «asdfg», то будет возвращено 97, что является десятичным кодом ASCII для «a».

get (char_type * s, streamsize n)

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

char str [10];
cout << "Input text:" << endl;
cin.получить (стр, 10);
cout << str << endl;

Если введено «великие люди», то на выходе будет «великие люди», состоящее из 9 символов, а не 10. Строка NUL-символ (\ 0) занимает десятую позицию в аргументе get. Итак, чтобы в str было 9 символов, размер его хранилища должен быть не менее 10, а аргумент get () должен быть 11. Если требуется вся строка ввода, то номер хранения строки должен быть не меньше количества набранных символов плюс 1. Итак, если для всей строки набрано 12 символов, то число должно быть 13 для размера хранения строки (str) и 13 для аргумента get (). Обратите внимание, что один пробел считается как один символ.

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

char str [30];
cout << "Input text:" << endl;
cin.получить (str, 6, 'o');
cout << str << endl;

Шестая позиция от начала - это пробел, который ограничивает только извлеченную подстроку. Шестая позиция идет первой перед единственным символом "о". Обратите внимание, что размер хранилища для str может быть как можно большим.

Если вводимый текст для следующего кода - «великие люди», то будет извлечено «gr»:

char str [30];
cout << "Input text:" << endl;
cin.получить (str, 10, 'e');
cout << str << endl;

Первая буква "е" стоит перед десятой позицией.

Получение всех символов строки

После нажатия клавиши Enter все символы, введенные в строку, можно получить, как показано в следующем коде:

cout << "Input text:" << endl;
в то время как (1)
char ch = (char) cin.получать();
cout << ch;
если (ch == '\ n')
перерыв;

Приведение с помощью (char) преобразует каждое десятичное число в соответствующий символ ASCII.

заглянуть ()

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

cout << "Input text:" << endl;
в то время как (1)
char ch = (char) cin.peek ();
cout << ch;
cin.получать();
если (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 it = 5;
поплавок ft = 63.5;
cout << "The " << it << " items cost $" << ft << " US." << endl;
возврат 0;

Результат:

5 предметов стоят 63 доллара.5 США.

Следующая программа показывает, как печатается строка объекта, созданного из класса:

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

cout << 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)

cout << 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 - это входной объект, а остальные - выходные объекты. Во время работы программы ввод в нее отличается от того, когда программа должна начать работу. Когда программа запускается, ввод в программу объединяется с командой для запуска программы, разделенной пробелами.

Битва за Веснот 1.13.6 Выпущена разработка
Битва за Веснот 1.13.6, выпущенная в прошлом месяце, является шестой разработкой в ​​1.13.x и содержит ряд улучшений, в первую очередь пользовательско...
Как установить League Of Legends на Ubuntu 14.04
Если вы поклонник League of Legends, то это возможность для вас протестировать League of Legends. Обратите внимание, что LOL поддерживается в PlayOnLi...
Установите последнюю версию игры OpenRA Strategy в Ubuntu Linux
OpenRA - это игровой движок Libre / Free Real Time Strategy, воссоздающий ранние игры Westwood, такие как классическая Command & Conquer: Red Alert. Р...