C ++

Управление на конзолата с iostream класовете в C ++

Управление на конзолата с iostream класовете в C ++

При изчисленията конзолата е компютърната клавиатура и компютърният монитор. В миналото изходът се изпращаше директно на екрана на монитора, а не в прозорец, показан на монитора. За обикновения потребител на компютър днес приложенията не използват изрично монитора. Тези приложения използват прозорци, показани на монитора. Въпреки това компютърният програмист все още трябва да използва екрана на монитора. Въпреки че програмистът все още трябва да използва екрана на монитора, операционната система не му позволява да прави това. Операционната система предоставя прозорец, който симулира екрана на монитора. В операционната система Windows този прозорец се нарича команден ред. В операционната система Linux и нейните варианти този прозорец се нарича терминал.

Очаква се читателят вече да знае как да използва командния ред или терминала. Тази статия обяснява как да четете символи и низове от клавиатурата и да изпращате символи и низове до терминала (или командния ред). Всеки програмист на C ++ трябва да знае в тази статия.

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

#include
използване на пространство от имена std;

Съдържание на статията

  • Обекти на тесен поток от стандартния iostream
  • Получаване на символи и низове от клавиатурата
  • Показване и изтриване на символи, преди да натиснете Enter
  • Изпращане на символи и низове до монитора
  • Аргументи за програма C ++
  • Заключение

Обекти на тесен поток от стандартния 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

Следната програма има грешка:

#include
използване на пространство от имена std;
int main ()

в myInt;
връщане 0;

Първото твърдение в main () не е правилно. Ако името на файла с кода е „temp.cc “и полученият изпълним файл трябва да се нарече„ temp “, след което следната команда g ++ ще изпрати съобщение за грешка на компилатора към файла,„ грешка.текст":

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", тогава запушването ще покаже отново "input_text" на екрана.

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

#include
използване на пространство от имена std;
int main ()

freopen ("дневник.txt "," w ", stdout);
Cout << "input_text" << endl;

Обърнете внимание на използването на функцията, freopen () и нейните аргументи. Първият му аргумент е името на регистрационния файл. Ако файлът не съществува, той ще бъде създаден. Вторият му аргумент е "w" за "write". Третият му аргумент е stdout за стандартен изход. Вторият оператор във функцията main () използва cout за изпращане на регистрационния текст към файла. Забележка: Действителният код за въвеждане не е показан в тази програма.

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

Докато потребителят пише въвеждане, символите се изпращат към буфера на входния поток и се показват на екрана. Когато потребителят натисне клавиша Enter, всички знаци са в буфера; също така, курсорът отива в началото на следващия ред отдолу, на екрана. След това програмата продължава към следващата инструкция на програмата, след изявлението за четене на входа.

Обектът cin има методи, с които се занимава този раздел.

Четене на първия знак

получи (char_type & c):
Следният кодов сегмент показва как да се прочете първият символ от буфера на входния поток:

char ch;
Cout << "Input text:" << endl;
cin.вземете (ch);
Cout << ch << endl;

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

Дори ако потребителят е въвел повече от един знак, първият знак ще бъде взет от кодовия сегмент.

get ():
get () без аргумент, връща десетичния ASCII код. Помислете за следния кодов сегмент:

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

Ако входът е "asdfg", тогава ще се върне 97, което е десетичният ASCII код за 'a'.

get (char_type * s, streamsize n)

След като потребителят въведе фраза и натисне клавиша Enter, няколко знака, започващи от първия, могат да бъдат извлечени от буфера на cin stream. Може да се използва следният код:

char str [10];
Cout << "Input text:" << endl;
cin.получи (str, 10);
Cout << str << endl;

Ако входът е "велики хора", тогава изходът ще бъде "велик човек", с 9 знака, а не 10. Символът на низа NUL (\ 0) заема десетата позиция в аргумента get. Така че, за да има 9 символа в str, размерът му на съхранение трябва да бъде поне 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.get (str, 6, 'o');
Cout << str << endl;

Шестата позиция от самото начало е интервалът и ограничава изключително извлечения подниз. Шестата позиция е на първо място пред единствения знак „o“. Имайте предвид, че размерът на паметта за str може да бъде възможно най-голям.

Ако входният текст към следния код е „велики хора“, тогава ще бъде извлечено „gr“:

char str [30];
Cout << "Input text:" << endl;
cin.get (str, 10, 'e');
Cout << str << endl;

Първото появяване на „e“ идва първо преди десетата позиция.

Получаване на всички символи на линия

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

Cout << "Input text:" << endl;
докато (1)
char ch = (char) cin.get ();
Cout << ch;
ако (ch == '\ n')
почивка;

Кастингът с (char) преобразува всяко десетично число в съответния ASCII знак.

надниквам ()

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

Cout << "Input text:" << endl;
докато (1)
char ch = (char) cin.надникнете ();
Cout << 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 и обикновения текст на екрана:

#include
използване на пространство от имена std;
int main ()

int it = 5;
float ft = 63.5;
Cout << "The " << it << " items cost $" << ft << " US." << endl;
връщане 0;

Резултатът е:

5-те артикула струват $ 63.5 САЩ.

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

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

Cout << obj.str << '\n';
връщане 0;

Резултатът е "някои думи".

Аргументи за програма C ++

Изпълнението на програмата започва от основната () функция. Функцията main () всъщност има два незадължителни параметъра. Синтаксисът на функцията main () с незадължителните параметри е:

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

връщане 0;

Да приемем, че името на изпълнимия файл C ++ е „temp“. Да приемем, че аргументите, от които програмата се нуждае от своята среда (операционна система), въведени от потребителя, са,

статии 3 книжна писалка "голяма къща"

Тук има 5 аргумента: „статии“, „3“, „книга“, „писалка“ и „голяма къща“

Всеки е текст. Номериран аргумент на програма е текст. С други думи, всеки аргумент е низ. „Голяма къща“ е в кавички, защото е фраза. Терминалната команда за стартиране на тази програма ще бъде:

./ темп статии 3 книжна писалка "голяма къща"

Ако приемем, че временната стойност на файла е в началната директория. Имайте предвид, че интервалите, а не запетаите разделят аргументите.

Сега, в синтаксиса на функцията main (), argc е броят на аргументите за програмата, плюс 1. В този случай има 5 аргумента за програмата. И така, argc е 6. В синтаксиса argv [argc] е масив от указатели към низове. Първата стойност за този масив при argv [0] се дава от компилатора. Това е указател към името на програмния файл. Останалите стойности са указатели към програмните аргументи в реда на потребителя, въведен. Размерът на този масив е argc. В този случай размерът е 1 + 5 = 6.

Да приемем, че при компилацията следната програма се нарича temp:

#include
използване на пространство от имена 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 книжна писалка "голяма къща"

тогава изходът ще бъде:

./ temp, статии, 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 се поддържа на PlayOnLinux, ако сте п...
Инсталирайте най-новата стратегия за игра OpenRA на Ubuntu Linux
OpenRA е Libre / Free Real Time стратегия за игра, която пресъздава ранните игри на Westwood като класическата Command & Conquer: Red Alert. Разпредел...