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

Managing Console With Iostream Classes C



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

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







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



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

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

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

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



Стоимость

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





Стоимость << «Это выход».;

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



Стоимость << «Это выход». <<конец;

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

Стоимость << «Это выход». << ' п';

При использовании « n» все строки текста могут по-прежнему не сразу появляться на экране. endl выводит на экран всю строку текста.

Примечание: строка, отправляемая в cout, находится в двойных кавычках, а отправляемый символ - в одинарных кавычках. Последовательность строк и символов может быть отправлена ​​в одном операторе, каждому из которых предшествует<< . All that will appear in one line at the output if ‘ ’ is not in the series.

Джин

cin - это стандартный объект ввода iostream, уже созданный и доступный в стандартной библиотеке. Рассмотрим следующий фрагмент кода в функции main ():

символтекст[пятьдесят];
Стоимость << 'Введите слово и нажмите Enter:' текст;
Стоимость <<текст<<конец;

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

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

символтекст[двадцать];
intЭто;
плаватьфутов;
Стоимость << 'Введите 3 значения и нажмите Enter:' текст>>Это>>футов;
Стоимость <<текст<< '' <<Это<< '' <<футов<<конец;

Обратите внимание на заявление:

Джин >>текст>>Это>>футов;

Первое слово извлекается в txt, следующее за ним и последнее - в ft. Если ввод был,

один25 3,6

тогда вывод сегмента кода будет,

один25 3,6

Cerr

В следующей программе произошла ошибка:

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

intглавный()
{
в myInt;

возвращение 0;
}

Первый оператор в main () неверен. Если имя файла с кодом - temp.cc и полученный исполняемый файл должен называться temp, то следующая команда g ++ отправит сообщение об ошибке компилятора в файл error.txt:

грамм++ -o темп.ОКРУГ КОЛУМБИЯ 2>ошибка.текст

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

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

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

Cerr << 'Сообщение об ошибке!' << ' п';

засорять

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

символтекст[пятьдесят];
Стоимость<<'Введите текст и нажмите Enter:'текст;
засорять<<текст<<конец;

Если входной текст - «input_text», тогда clog будет повторно отображать «input_text» на экране.

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

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

intглавный()
{
открыто( 'log.txt','в',стандартный вывод);

Стоимость << 'input_text' <<конец;
}

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

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

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

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

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

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

символch;
Стоимость << 'Введите текст:' <<конец;
Джин.получать(ch);
Стоимость <<ch<<конец;

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

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

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

Стоимость << 'Введите текст:' <<конец;
Стоимость << Джин.получать() <<конец;

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

get (char_type * s, streamsize n)

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

символп[10];
Стоимость << 'Введите текст:' <<конец;
Джин.получать(ул,10);
Стоимость <<п<<конец;

Если на входе «великие люди», то на выходе будет «великий человек», состоящий из 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)
Можно извлечь подстроку, разделенную справа, по первому вхождению определенного символа или по размеру потока подстроки, в зависимости от того, что происходит раньше. Если вводимый текст для следующего кода - это отличные люди, то будет извлечено отличное:

символп[30];
Стоимость << 'Введите текст:' <<конец;
Джин.получать(ул,6,'или');
Стоимость <<п<<конец;

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

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

символп[30];
Стоимость << 'Введите текст:' <<конец;
Джин.получать(ул,10,'А также');
Стоимость <<п<<конец;

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

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

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

Стоимость << 'Введите текст:' <<конец;
в то время как (1) {
символchзнак равно (символ)Джин.получать();
Стоимость <<ch;
если (ch== ' п')
перерыв;
}

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

заглянуть ()

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

Стоимость << 'Введите текст:' <<конец;
в то время как (1) {
символchзнак равно (символ)Джин.заглядывать();
Стоимость <<ch;
Джин.получать();
если (ch== ' п')
перерыв;
}

Если следующие символы не были удалены с помощью 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 ‘ ’ or endl is encountered.

Выражения, которые приводят к скалярам, ​​могут быть аргументами для оператора вставки. Оператор преобразует скаляр в текст и помещает текст в поток объекта cout. Когда текст отправляется в объект cout, он обычно появляется на экране (мониторе). Однако иногда он может появиться не сразу. Чтобы принудительно выводить текст на экран, вставьте специальное значение endl сразу после вставки текста. Это приведет к тому, что текст будет сброшен на экран, и будет добавлена ​​новая строка. Примечание. ‘ N’ просто добавляет новую строку, но не выводит текст на экран.

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

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

intглавный()
{
intЭтознак равно 5;
плаватьфутовзнак равно 63,5;
Стоимость << 'The' <<Это<< 'предметы стоят $' <<футов<< ' НАС.' <<конец;

возвращение 0;
}

Результат:

В5предметы стоят $63,5НАС.

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

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

структураУл.{
символп[одиннадцать] знак равно 'несколько слов';
}объект;

intглавный()
{
Стоимость <<объектп << ' п';

возвращение 0;
}

Результат - «несколько слов».

Аргументы в пользу программы на C ++

Выполнение программы начинается с функции main (). На самом деле функция main () имеет два необязательных параметра. Синтаксис функции main () с необязательными параметрами:

intглавный(intargc,символ *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:

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

intглавный(intargc,символ**argv)
{

Стоимость <<argv[0] << ',' <<argv[1] << ',' <<argv[2] << ',' <<argv[3] << ',' <<argv[4] << ',' <<argv[5] <<конец;

возвращение 0;
}

Обратите внимание, что массив char * argv [argc] объявлен как char ** argv.

Если эта программа запускается с командой терминала,

./временные статьи3ручка для книг'большой дом'

тогда вывод будет:

./темп, статьи,3, книга, перо, большой дом

Обратите внимание, что путь к каталогу был включен в имя исполняемого файла.

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

Заключение

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