C ++

Hantera konsolen med iostream-klasser i C ++

Hantera konsolen med iostream-klasser i C ++

I datorer är konsolen datorns tangentbord och datorskärmen. Tidigare skickades utdata direkt till bildskärmen och inte till ett fönster på skärmen. För den vanliga datoranvändaren använder applikationer idag inte monitorn uttryckligen. Dessa applikationer använder fönster som visas på skärmen. Datorprogrammeraren behöver dock fortfarande använda bildskärmen. Även om programmeraren fortfarande behöver använda bildskärmen, tillåter inte operativsystemet honom att göra det. Operativsystemet ger ett fönster som simulerar bildskärmen. I Windows operativsystem kallas detta fönster Kommandotolken. I Linux-operativsystemet och dess varianter kallas detta fönster terminalen.

Det förväntas att läsaren redan vet hur man använder kommandotolken eller terminalen. Den här artikeln förklarar hur man läser tecken och strängar från tangentbordet och skickar tecken och strängar till terminalen (eller kommandotolken). Alla C ++ - programmerare behöver veta i den här artikeln.

För att få inmatning från tangentbordet och mata ut till terminalen måste programmet börja med:

#omfatta
använder namnrymd std;

Artikelinnehåll

  • Smala strömobjekt från Standard iostream
  • Skaffa karaktärer och strängar från tangentbordet
  • Visa och ta bort tecken innan du trycker på Enter
  • Skicka tecken och strängar till bildskärmen
  • Argument för ett C ++ - program
  • Slutsats

Smala strömobjekt från Standard iostream

Iostream-klassen, standardobjekten, cout, cin, cerr och clog, har instantierats och finns redan i standardbiblioteket. Programmeraren använder dem bara utan att starta om igen.

cout

Följande uttalande i huvudfunktionen () skickar texten, "Detta matas ut.”Till terminalen:

cout << "This is output.";

cout är ett iostream-objekt i standardbiblioteket, redan instanserat. << 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.

Med ovanstående uttalande visas kommandotolken som visas igen till höger om utdatafrasen. Det går inte till nästa rad. "Endl" i slutet av följande uttalande tvingar allt som skrivs ut på skärmen till nästa rad:

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

“Endl” är en fördefinierad variabel. Skärminnehåll kan också tvingas till nästa rad med:

cout << "This is output." << '\n';

Med hjälp av '\ n' kanske alla textrader fortfarande inte visas direkt på skärmen. ”Endl” spolar hela textraden till skärmen.

Obs! En sträng som skickas till cout är i dubbla citat, medan en skickad karaktär är i enstaka citat. En serie strängar och tecken kan skickas i ett uttalande, var och en föregås av << . All that will appear in one line at the output if '\n' is not in the series.

cin

cin är standard iostream-ingångsobjekt, redan instanserat och tillgängligt i standardbiblioteket. Tänk på följande kodsegment i huvudfunktionen ():

char txt [50];
cout << "Enter a word and press Enter:" <> Text;
cout << txt << endl;

Det första uttalandet förklarar en tom matris med 50 tecken. Det andra uttalandet instruerar användaren att skriva in ett ord på nästa skärmrad och trycka på Enter-tangenten. Observera användningen av "endl" som tvingar användaren att skriva in text i nästa rad på skärmen. När användaren skriver text ekas den inmatade texten på skärmen medan den går in i cin-objektet. Efter att ha tryckt på Enter körs det tredje uttalandet i kodsegmentet. Detta tredje uttalande skickar den inmatade texten till variabeln, txt. Den angivna texten får i detta fall inte vara längre än 50 tecken. Observera användningen av extraktionsoperatören, >>. Det sista uttalandet visar den inmatade texten på skärmen.

cin kan ta mer än ett ord från tangentbordet, åtskilda av mellanslag. Dessa ord måste extraheras i olika variabler. Följande kodsegment illustrerar detta:

char txt [20];
int it;
flyta ft;
cout << "Enter 3 values and press Enter:" <> txt >> it >> ft;
cout << txt << " << it << " << ft << endl;

Notera uttalandet:

cin >> txt >> it >> ft;

Det första ordet extraheras till txt, nästa bredvid det och det sista till ft. Om ingången var,

en 25 3.6

då skulle utdata från kodsegmentet vara,

en 25 3.6

cerr

Följande program har ett fel:

#omfatta
använder namnrymd std;
int main ()

i mitt
returnera 0;

Det första uttalandet i main () är inte korrekt. Om namnet på filen med koden är “temp.cc "och den resulterande körbara filen ska kallas" temp ", då kommer följande g ++ - kommando att skicka kompileringsfelmeddelandet till filen," error.Text":

g ++ -o temp temp.cc 2> fel.Text

Om filen “fel.txt ”existerar inte, det skulle skapas. Observera delen ”2> fel.txt ”i kommandot g ++.

Skärmen är standardutmatningsdestinationen och det är också standardfelsdestinationen. Om “2> fel.txt ”utelämnas från g ++ -kommandot, då skickas kompileringsfelmeddelandet till standardfelmålet, som fortfarande är skärmen (monitor).

Strömobjektet som representerar standardutmatningsdestinationen är cout. Strömobjektet som representerar standardfelmålet är cerr. Ett programkörningsfel kan skickas till skärmen enligt följande:

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

täppa till

En applikation tar olika ingångar vid olika tidpunkter. Alla ingångar kan visas på skärmen igen. Alla ingångar kan sparas i en fil. Det här är loggning. Standardloggningsdestinationen är skärmen. Standard loggningsströmobjektet är en igensättning. Följande kod visar ingångstexten på skärmen igen:

char txt [50];
cout<<"Enter text and press Enter:"<>Text;
täppa till<Om den inmatade texten är "input_text", kommer igensättning att visa "input_text" igen på skärmen.

I praktiken omdirigeras loggning vanligtvis till en fil. Följande program illustrerar detta:

#omfatta
använder namnrymd std;
int main ()

freopen ("log.txt "," w ", stdout);
cout << "input_text" << endl;

Observera användningen av funktionen, freopen () och dess argument. Dess första argument är namnet på loggfilen. Om filen inte finns skulle den skapas. Dess andra argument är "w" för "skriv". Dess tredje argument är stdout för standard-output. Det andra uttalandet i huvudfunktionen () använder cout för att skicka loggtexten till filen. Obs! Den faktiska inmatningskoden har inte visats i detta program.

Skaffa karaktärer och strängar från tangentbordet

Medan användaren skriver inmatning skickas tecknen till ingångsströmbufferten och visas på skärmen. När användaren trycker på Enter-tangenten finns alla tecken i bufferten. markören går också till början av nästa rad nedan på skärmen. Programmet fortsätter sedan till nästa programuttalande, efter ingångsläsningsuttalandet.

Cin-objektet har metoder som detta avsnitt handlar om.

Läser första karaktären

få (char_type & c):
Följande kodsegment visar hur man läser det första tecknet från ingångsströmbufferten:

char ch;
cout << "Input text:" << endl;
cin.få (ch);
cout << ch << endl;

Det första uttalandet förklarar en karaktär utan tilldelning. Det andra uttalandet ber användaren att mata in ett tecken. När användaren skriver in tecken och trycker på Enter-tangenten, kopierar det tredje uttalandet tecknet från ingångsströmbufferten till variabeln, ch.

Även om användaren skrev in mer än ett tecken, skulle det första tecknet tas av kodsegmentet.

skaffa sig():
get () utan argument, returnerar den decimala ASCII-koden. Tänk på följande kodsegment:

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

Om ingången är "asdfg" skulle 97 returneras, vilket är den decimala ASCII-koden för "a".

get (char_type * s, streamsize n)

Efter att användaren har matat in en fras och tryckt på Enter-tangenten, ett antal tecken som börjar från den första, kan extraheras från cin-strömbufferten. Följande kod kan användas:

char str [10];
cout << "Input text:" << endl;
cin.få (str, 10);
cout << str << endl;

Om ingången är "fantastiska människor" kommer utmatningen att vara "bra peo", med 9 tecken och inte 10. Strängen NUL-tecken (\ 0) tar den tionde positionen i get-argumentet. För att ha 9 tecken i str måste lagringsstorleken vara minst 10, och argumentet get () måste vara 11. Om hela inmatningsraden önskas måste stränglagringsnumret vara minst det antal tecken som skrivs, plus 1. Så, om 12 tecken skrivs för hela raden, ska numret vara 13 för strängens (str) lagringsstorlek och 13 för get () -argumentet. Observera att ett mellanslag räknas som ett tecken.

få (char_type * s, streamsize n, char_type delim)
Det är möjligt att extrahera en understräng, avgränsad till höger, genom den första förekomsten av ett visst tecken, eller genom delsträngens strömstorlek, som någonsin kommer först. Om inmatningstexten till följande kod är “great people”, skulle “great” extraheras:

char str [30];
cout << "Input text:" << endl;
cin.få (str, 6, 'o');
cout << str << endl;

Den sjätte positionen från början är rymdkaraktären och avgränsar den extraherade strängen exklusivt. Den sjätte positionen kommer först före den enda karaktären, 'o'. Observera att lagringsstorleken för str kan vara så hög som möjligt.

Om inmatningstexten till följande kod är "bra människor", skulle "gr" extraheras:

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

Den första förekomsten av 'e' kommer först före den tionde positionen.

Få alla karaktärer i en linje

Efter att ha tryckt på Enter-tangenten kan alla tecken som skrivs in i raden fås som visas i följande kod:

cout << "Input text:" << endl;
medan (1)
char ch = (char) cin.skaffa sig();
cout << ch;
om (ch == '\ n')
ha sönder;

Gjutningen med (char) omvandlar varje decimaltal till motsvarande ASCII-tecken.

titt()

Get () - medlemsfunktionerna läser inte bara nästa tecken; de tar bort den från strömbufferten. Peek () medlemsfunktionen läser emellertid nästa tecken (börjar från det första) utan att ta bort det från bufferten. I följande kod läses varje tecken först med peek () -funktionen innan den tas bort av get () -funktionen. Allt som händer när användaren trycker på Enter-tangenten:

cout << "Input text:" << endl;
medan (1)
char ch = (char) cin.titt();
cout << ch;
cin.skaffa sig();
om (ch == '\ n')
ha sönder;

Om nästa tecken inte togs bort med get (), skulle peek () bara läsa det första tecknet och slingan kommer att upprepas på obestämd tid.

Visa och ta bort tecken innan du trycker på Enter

Observera att med cin-objektet måste Enter-tangenten tryckas innan det kommer att göras. Det är möjligt att tecken visas när de skrivs och raderas innan du trycker på Enter-tangenten. Det betyder dock att man gränssnitt med operativsystemet. Operativsystem skiljer sig åt. Så det betyder olika kodning för olika operativsystem. Så det här ämnet förtjänar en helt annan handledning - se senare.

Skicka tecken och strängar till bildskärmen

Cout-objektet är ett utgående strömobjekt, redan instanserat och närvarande i C ++ - standardbiblioteket. cout är huvudobjektet som används för att skicka tecken och strängar till monitorn. Detta görs med insättningsoperatören, << . 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.

Uttryck som resulterar i skalar kan vara argument för insättningsoperatören. Operatören omvandlar skalaren till text och placerar texten i cout-objektströmmen. När text skickas till cout-objektet visas den normalt på skärmen (monitor). Ibland kanske det inte visas omedelbart. För att tvinga text in på skärmen, sätt in specialvärdet "endl" strax efter att du har infogat texten. Detta gör att texten spolas till skärmen och en ny rad läggs till. Obs: '\ n' lägger helt enkelt till en ny rad men spolar inte text till skärmen.

Följande program visar hur man skriver ut värdena för int, float och vanlig text på skärmen:

#omfatta
använder namnrymd std;
int main ()

int it = 5;
flottör ft = 63.5;
cout << "The " << it << " items cost $" << ft << " US." << endl;
returnera 0;

Utgången är:

De 5 artiklarna kostar $ 63.5 USA.

Följande program visar hur strängen för ett objekt som instanserats från en klass skrivs ut:

#omfatta
använder namnrymd std;
struct St
char str [11] = "några ord";
obj;
int main ()

cout << obj.str << '\n';
returnera 0;

Resultatet är "några ord".

Argument för ett C ++ - program

Programkörning börjar från huvudfunktionen (). Huvudfunktionen () har faktiskt två valfria parametrar. Syntaxen för huvudfunktionen () med de valfria parametrarna är:

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

returnera 0;

Antag att namnet på den körbara C ++ -filen är "temp". Antag att de argument som programmet behöver från sin miljö (operativsystem), skrivna av användaren, är,

artiklar 3 bok penna "stort hus"

Det finns 5 argument här: "artiklar", "3", "bok", "penna" och "stort hus"

Var och en är text. Ett numrerat argument till ett program är text. Med andra ord är varje argument en sträng. "Stort hus" är i citat eftersom det är en fras. Terminalkommandot för att köra detta program skulle vara:

./ temp artiklar 3 bok penna "stort hus"

Förutsatt att filtemperaturen finns i hemkatalogen. Observera att mellanslag och inte komma skiljer argumenten.

Nu, i huvudfunktionssyntaxen, är argc antalet argument för programmet, plus 1. I det här fallet finns det 5 argument för programmet. Så argc är 6. I syntaxen är argv [argc] en uppsättning pekare till strängar. Det första värdet för denna matris vid argv [0] ges av kompilatorn. Det är en pekare till namnet på programfilen. Resten av värdena är pekare till programargumenten i användarens ordning som skrivits in. Storleken på denna array är argc. I detta fall är storleken 1 + 5 = 6.

Antag att vid sammanställning heter följande program temp:

#omfatta
använder namnrymd std;
int main (int argc, char ** argv)

cout << argv[0] << ", " << argv[1] << ", " << argv[2] << ", " << argv[3] << ", " << argv[4] << ", " << argv[5] << endl;
returnera 0;

Observera här att matrisen "char * argv [argc]" har förklarats som "char ** argv".

Om detta program körs med terminalkommandot,

./ temp artiklar 3 bok penna "stort hus"

då skulle produktionen vara:

./ temp, artiklar, 3, bok, penna, stort hus

Observera att katalogvägen har inkluderats i namnet på den körbara filen.

Observera också att under körningen av programmet (anrop av programmet) har värdet för argc inte skickats.

Slutsats

Iiostream-klassen har fyra viktiga objekt som är cout, cin, cerr och clog. cin är ett inmatningsobjekt, medan resten är utmatningsobjekt. Medan ett program körs skiljer sig ingången till programmet från när programmet ska börja köras. När ett program startar förenas ingången till programmet med kommandot att köra programmet, åtskilda av mellanslag.

De bästa Oculus App Lab-spelen
Om du är Oculus-headsetägare måste du vara förtjust i sidoladdning. Sideladdning är processen för att installera icke-butiksinnehåll på ditt headset. ...
Topp 10 spel att spela på Ubuntu
Windows-plattformen har varit en av de dominerande plattformarna för spel på grund av den enorma andelen spel som utvecklas idag för att stödja Window...
5 bästa arkadspel för Linux
Numera är datorer seriösa maskiner som används för spel. Om du inte kan få den nya poängen vet du vad jag menar. I det här inlägget kommer du att känn...