Verwalten der Konsole mit den iostream-Klassen in C++

Managing Console With Iostream Classes C



Im Computerbereich ist die Konsole die Computertastatur und der Computermonitor. In der Vergangenheit wurde die Ausgabe direkt an den Monitorbildschirm gesendet und nicht an ein auf dem Monitor angezeigtes Fenster. Für den normalen Computerbenutzer verwenden Anwendungen heute den Monitor nicht explizit. Diese Anwendungen verwenden Fenster, die auf dem Monitor angezeigt werden. Der Computerprogrammierer muss jedoch weiterhin den Monitorbildschirm verwenden. Obwohl der Programmierer immer noch den Monitorbildschirm verwenden muss, erlaubt ihm das Betriebssystem nicht, dies zu tun. Das Betriebssystem bietet ein Fenster, das den Monitorbildschirm simuliert. Im Windows-Betriebssystem wird dieses Fenster als Eingabeaufforderung bezeichnet. Im Linux-Betriebssystem und seinen Varianten wird dieses Fenster als Terminal bezeichnet.

Es wird erwartet, dass der Leser bereits mit der Eingabeaufforderung oder dem Terminal vertraut ist. In diesem Artikel wird erläutert, wie Sie Zeichen und Zeichenfolgen von der Tastatur lesen und Zeichen und Zeichenfolgen an das Terminal (oder die Eingabeaufforderung) senden. Jeder C++-Programmierer muss in diesem Artikel wissen.







Um Eingaben über die Tastatur und Ausgabe auf dem Terminal zu haben, muss das Programm beginnen mit:



#enthalten
mit Namensraumstd;

Artikelinhalt

Narrow Stream-Objekte des Standard iostream

Die Klasse iostream, die Standardobjekte cout, cin, cerr und clog sind instanziiert und bereits in der Standardbibliothek enthalten. Der Programmierer verwendet sie einfach, ohne sie erneut zu instanziieren.



Kosten

Die folgende Anweisung in der Funktion main() sendet den Text Dies wird ausgegeben. zum Terminal:





Kosten << 'Dies wird ausgegeben.';

cout ist ein bereits instanziiertes Ausgabe-IOstream-Objekt in der Standardbibliothek.<< 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.

Mit der obigen Anweisung erscheint die erneut angezeigte Eingabeaufforderung rechts neben der Ausgabephrase. Es geht nicht in die nächste Zeile. endl am Ende der folgenden Anweisung zwingt alles, was vom Bildschirm ausgegeben wird, in die nächste Zeile:



Kosten << 'Dies wird ausgegeben.' <<endl;

endl ist eine vordefinierte Variable. Bildschirminhalte können auch mit folgendem Befehl in die nächste Zeile gebracht werden:

Kosten << 'Dies wird ausgegeben.' << ' ';

Bei der Verwendung von ' ' werden möglicherweise immer noch nicht alle Textzeilen auf dem Bildschirm angezeigt. endl leert die gesamte Textzeile auf dem Bildschirm.

Hinweis: Eine an cout gesendete Zeichenfolge steht in doppelten Anführungszeichen, während ein gesendetes Zeichen in einfachen Anführungszeichen steht. In einer Anweisung kann eine Reihe von Strings und Zeichen gesendet werden, denen jeweils ein vorangestellt ist<< . All that will appear in one line at the output if ‘ ’ is not in the series.

Gin

cin ist das standardmäßige iostream-Eingabeobjekt, das bereits instanziiert und in der Standardbibliothek verfügbar ist. Betrachten Sie das folgende Codesegment in der Funktion main():

verkohlenTXT[fünfzig];
Kosten << 'Geben Sie ein Wort ein und drücken Sie die Eingabetaste:' TXT;
Kosten <<TXT<<endl;

Die erste Anweisung deklariert ein leeres Array mit 50 Zeichen. Die zweite Anweisung weist den Benutzer an, in der nächsten Bildschirmzeile ein Wort einzugeben und die Eingabetaste zu drücken. Beachten Sie die Verwendung von 'endl', die den Benutzer dazu zwingt, Text in der nächsten Zeile des Bildschirms einzugeben. Während der Benutzer Text eingibt, wird der eingegebene Text auf dem Bildschirm wiedergegeben, während er in das cin-Objekt eingeht. Nach Drücken der Eingabetaste wird die dritte Anweisung im Codesegment ausgeführt. Diese dritte Anweisung sendet den eingegebenen Text an die Variable txt. Der eingegebene Text sollte in diesem Fall nicht länger als 50 Zeichen sein. Beachten Sie die Verwendung des Extraktionsoperators >>. Die letzte Anweisung zeigt den eingegebenen Text auf dem Bildschirm an.

cin kann mehr als ein Wort von der Tastatur annehmen, getrennt durch Leerzeichen. Diese Wörter müssen in verschiedene Variablen extrahiert werden. Das folgende Codesegment veranschaulicht dies:

verkohlenTXT[zwanzig];
intes;
schwebenft;
Kosten << 'Geben Sie 3 Werte ein und drücken Sie die Eingabetaste:' TXT>>es>>ft;
Kosten <<TXT<< '' <<es<< '' <<ft<<endl;

Beachte die Aussage:

Gin >>TXT>>es>>ft;

Das erste Wort wird in txt extrahiert, das nächste und das letzte in ft. Wenn die Eingabe war,

einer25 3.6

dann wäre die Ausgabe durch das Codesegment,

einer25 3.6

cerr

Das folgende Programm hat einen Fehler:

#enthalten
mit Namensraumstd;

inthauptsächlich()
{
in myInt;

Rückkehr 0;
}

Die erste Anweisung in main() ist nicht korrekt. Wenn der Name der Datei mit dem Code temp.cc lautet und die resultierende ausführbare Datei temp heißen soll, sendet der folgende g++-Befehl die Compiler-Fehlermeldung an die Datei error.txt:

g++ -o temp temp.DC 2>Error.TXT

Wenn die Datei error.txt nicht existiert, wird sie erstellt. Beachten Sie den Abschnitt 2>error.txt des g++-Befehls.

Der Bildschirm ist das Standardausgabeziel und auch das Standardfehlerziel. Wenn 2>error.txt im g++-Befehl weggelassen wird, wird die Compiler-Fehlermeldung an das Standardfehlerziel gesendet, das immer noch der Bildschirm (Monitor) ist.

Das Stream-Objekt, das das Standardausgabeziel darstellt, ist cout. Das Stream-Objekt, das das Standardfehlerziel darstellt, ist cerr. Ein Laufzeitfehler des Programms kann wie folgt an den Bildschirm gesendet werden:

cerr << 'Die Fehlermeldung!' << ' ';

verstopfen

Eine Anwendung nimmt unterschiedliche Eingaben zu unterschiedlichen Zeiten entgegen. Alle Eingaben können auf dem Bildschirm wieder angezeigt werden. Alle Eingaben können in einer Datei gespeichert werden. Das ist Protokollierung. Das Standardprotokollierungsziel ist der Bildschirm. Das Standard-Logging-Stream-Objekt ist ein Clog. Der folgende Code zeigt den eingegebenen Text erneut auf dem Bildschirm an:

verkohlenTXT[fünfzig];
Kosten<<'Text eingeben und Enter drücken:'TXT;
verstopfen<<TXT<<endl;

Wenn der Eingabetext 'input_text' ist, würde clog 'input_text' erneut auf dem Bildschirm anzeigen.

In der Praxis wird die Protokollierung normalerweise in eine Datei umgeleitet. Das folgende Programm veranschaulicht dies:

#enthalten
mit Namensraumstd;

inthauptsächlich()
{
freopen( 'log.txt','in',stdout);

Kosten << 'Eingabetext' <<endl;
}

Beachten Sie die Verwendung der Funktion freopen() und ihrer Argumente. Das erste Argument ist der Name der Protokolldatei. Wenn die Datei nicht existiert, wird sie erstellt. Das zweite Argument ist 'w' für 'write'. Das dritte Argument ist stdout für die Standardausgabe. Die zweite Anweisung in der Funktion main() verwendet cout, um den Protokolltext an die Datei zu senden. Hinweis: Der eigentliche Eingabecode wurde in diesem Programm nicht angezeigt.

Abrufen von Zeichen und Strings von der Tastatur

Während der Benutzer Eingaben eingibt, werden die Zeichen an den Eingabedatenstrompuffer gesendet und auf dem Bildschirm angezeigt. Wenn der Benutzer die Eingabetaste drückt, befinden sich alle Zeichen im Puffer; Außerdem springt der Cursor auf dem Bildschirm an den Anfang der nächsten Zeile darunter. Das Programm fährt dann mit der nächsten Programmanweisung nach der Eingabeleseanweisung fort.

Das cin-Objekt verfügt über Methoden, mit denen sich dieser Abschnitt beschäftigt.

Das erste Zeichen lesen

get(char_type& c):
Das folgende Codesegment zeigt, wie das erste Zeichen aus dem Eingabedatenstrompuffer gelesen wird:

verkohlenCH;
Kosten << 'Eingabetext:' <<endl;
Gin.werden(CH);
Kosten <<CH<<endl;

Die erste Anweisung deklariert ein Zeichen ohne Zuweisung. Die zweite Anweisung weist den Benutzer an, ein Zeichen einzugeben. Wenn der Benutzer Zeichen eingibt und die Eingabetaste drückt, kopiert die dritte Anweisung das Zeichen aus dem Eingabedatenstrompuffer in die Variable ch.

Selbst wenn der Benutzer mehr als ein Zeichen eintippte, würde das erste Zeichen vom Codesegment übernommen.

werden():
get() ohne Argument gibt den dezimalen ASCII-Code zurück. Betrachten Sie das folgende Codesegment:

Kosten << 'Eingabetext:' <<endl;
Kosten << Gin.werden() <<endl;

Wenn die Eingabe 'asdfg' ist, wird 97 zurückgegeben, was der dezimale ASCII-Code für 'a' ist.

get(char_type* s, streamsize n)

Nachdem der Benutzer eine Phrase eingegeben und die Eingabetaste gedrückt hat, kann eine Anzahl von Zeichen beginnend mit dem ersten aus dem Cin-Stream-Puffer extrahiert werden. Der folgende Code kann verwendet werden:

verkohlenP[10];
Kosten << 'Eingabetext:' <<endl;
Gin.werden(Str.,10);
Kosten <<P<<endl;

Wenn die Eingabe 'großartige Leute' ist, dann ist die Ausgabe 'großartige Leute' mit 9 und nicht 10 Zeichen. Die Zeichenfolge NUL-Zeichen () nimmt die zehnte Position im Argument get ein. Um also 9 Zeichen in str zu haben, muss die Speichergröße mindestens 10 sein und das Argument get() muss 11 sein. Wenn die gesamte Eingabezeile gewünscht wird, muss die String-Speichernummer mindestens die Zahl der eingegebenen Zeichen plus 1. Wenn also 12 Zeichen für die gesamte Zeile eingegeben werden, sollte die Zahl 13 für die Speichergröße der Zeichenfolge (str) und 13 für das Argument get() sein. Beachten Sie, dass ein Leerzeichen als ein Zeichen gezählt wird.

get(char_type* s, streamsize n, char_type delim)
Es ist möglich, eine rechts abgegrenzte Teilzeichenfolge durch das erste Vorkommen eines bestimmten Zeichens oder durch die Streamgröße der Teilzeichenfolge zu extrahieren, je nachdem, was zuerst eintritt. Wenn der Eingabetext für den folgenden Code großartig ist, wird großartig extrahiert:

verkohlenP[30];
Kosten << 'Eingabetext:' <<endl;
Gin.werden(Str.,6,'oder');
Kosten <<P<<endl;

Die sechste Position von Anfang an ist das Leerzeichen und begrenzt ausschließlich die extrahierte Teilzeichenfolge. Die sechste Position steht an erster Stelle vor dem einzigen Zeichen 'o'. Beachten Sie, dass die Speichergröße für str so hoch wie möglich sein kann.

Wenn der Eingabetext für den folgenden Code großartige Leute ist, wird gr extrahiert:

verkohlenP[30];
Kosten << 'Eingabetext:' <<endl;
Gin.werden(Str.,10,'Und');
Kosten <<P<<endl;

Das erste Auftreten von 'e' kommt zuerst vor der zehnten Stelle.

Alle Zeichen einer Zeile erhalten

Nach dem Drücken der Eingabetaste können alle in die Zeile eingegebenen Zeichen wie im folgenden Code gezeigt abgerufen werden:

Kosten << 'Eingabetext:' <<endl;
während (1) {
verkohlenCH= (verkohlen)Gin.werden();
Kosten <<CH;
wenn (CH== ' ')
brechen;
}

Die Umwandlung mit (char) wandelt jede Dezimalzahl in das entsprechende ASCII-Zeichen um.

spähen()

Die Memberfunktionen get() lesen nicht nur das nächste Zeichen; sie entfernen es aus dem Stream-Puffer. Die Memberfunktion peek() liest jedoch einfach das nächste Zeichen (beginnend mit dem ersten), ohne es aus dem Puffer zu entfernen. Im folgenden Code wird jedes Zeichen zuerst mit der peek()-Funktion gelesen, bevor es von der get()-Funktion entfernt wird. Alles, was passiert, nachdem der Benutzer die Eingabetaste gedrückt hat:

Kosten << 'Eingabetext:' <<endl;
während (1) {
verkohlenCH= (verkohlen)Gin.spähen();
Kosten <<CH;
Gin.werden();
wenn (CH== ' ')
brechen;
}

Wenn die nächsten Zeichen nicht von get() entfernt wurden, würde peek() nur das erste Zeichen lesen und die Schleife wird unbegrenzt wiederholt.

Anzeigen und Löschen von Zeichen vor dem Drücken der Eingabetaste

Beachten Sie, dass beim cin-Objekt die Eingabetaste gedrückt werden muss, bevor eine Aktion ausgeführt wird. Nun, es ist möglich, dass Zeichen während der Eingabe angezeigt und gelöscht werden, bevor die Eingabetaste gedrückt wird. Dies bedeutet jedoch eine Schnittstelle zum Betriebssystem. Betriebssysteme unterscheiden sich. Dies bedeutet also unterschiedliche Codierung für verschiedene Betriebssysteme. Dieses Thema verdient also ein ganz anderes Tutorial – siehe später.

Senden von Zeichen und Strings an den Monitor

Das cout-Objekt ist ein Ausgabestromobjekt, das bereits instanziiert und in der C++-Standardbibliothek vorhanden ist. cout ist das Hauptobjekt, das beim Senden von Zeichen und Strings an den Monitor verwendet wird. Dies geschieht mit dem Einfügeoperator,<< . 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.

Ausdrücke, die zu Skalaren führen, können Argumente für den Einfügeoperator sein. Der Operator wandelt den Skalar in Text um und platziert den Text im cout-Objektstrom. Wenn Text an das cout-Objekt gesendet wird, erscheint dieser normalerweise auf dem Bildschirm (Monitor). Gelegentlich wird es jedoch möglicherweise nicht sofort angezeigt. Um Text auf dem Bildschirm zu erzwingen, fügen Sie den Sonderwert endl direkt nach dem Einfügen des Textes ein. Dadurch wird der Text auf dem Bildschirm gespült und ein Zeilenumbruch wird hinzugefügt. Hinweis: „ “ fügt einfach einen Zeilenumbruch hinzu, fügt jedoch keinen Text auf dem Bildschirm ein.

Das folgende Programm zeigt, wie die Werte von int, float und normaler Text auf den Bildschirm gedruckt werden:

#enthalten
mit Namensraumstd;

inthauptsächlich()
{
intes= 5;
schwebenft= 63,5;
Kosten << 'Die ' <<es<< 'Artikel kosten $' <<ft<< ' UNS.' <<endl;

Rückkehr 0;
}

Die Ausgabe ist:

Die5Artikel kosten $63,5UNS.

Das folgende Programm zeigt, wie der String eines aus einer Klasse instanziierten Objekts ausgegeben wird:

#enthalten
mit Namensraumstd;

strukturierenNS{
verkohlenP[elf] = 'einige Worte';
}obj;

inthauptsächlich()
{
Kosten <<obj.P << ' ';

Rückkehr 0;
}

Die Ausgabe ist 'einige Wörter'.

Argumente für ein C++-Programm

Die Programmausführung beginnt mit der Funktion main(). Die main()-Funktion hat eigentlich zwei optionale Parameter. Die Syntax der Funktion main() mit den optionalen Parametern lautet:

inthauptsächlich(intArgumente,verkohlen *argv[argc])
{

Rückkehr 0;
}

Angenommen, der Name der ausführbaren C++-Datei lautet temp. Angenommen, die vom Benutzer eingegebenen Argumente, die das Programm von seiner Umgebung (Betriebssystem) benötigt, sind:

Artikel3Buchstift'großes Haus'

Hier gibt es 5 Argumente: Artikel, 3, Buch, Stift und großes Haus

Jeder ist Text. Ein nummeriertes Argument für ein Programm ist Text. Mit anderen Worten, jedes Argument ist ein String. großes Haus steht in Anführungszeichen, weil es eine Phrase ist. Der Terminalbefehl zum Ausführen dieses Programms wäre:

./temporäre Artikel3Buchstift'großes Haus'

Vorausgesetzt, die Datei temp befindet sich im Home-Verzeichnis. Beachten Sie, dass die Argumente durch Leerzeichen und nicht durch Kommas getrennt werden.

In der Syntax der Funktion main() ist argc die Anzahl der Argumente für das Programm plus 1. In diesem Fall gibt es 5 Argumente für das Programm. argc ist also 6. In der Syntax ist argv[argc] ein Array von Zeigern auf Strings. Der erste Wert für dieses Array bei argv[0] wird vom Compiler angegeben. Es ist ein Zeiger auf den Namen der Programmdatei. Die restlichen Werte sind Zeiger auf die Programmargumente in der vom Benutzer eingegebenen Reihenfolge. Die Größe dieses Arrays ist argc. In diesem Fall ist die Größe 1 + 5 = 6.

Angenommen, bei der Kompilierung heißt das folgende Programm temp:

#enthalten
mit Namensraumstd;

inthauptsächlich(intArgumente,verkohlen**argv)
{

Kosten <<argv[0] << ',' <<argv[1] << ',' <<argv[2] << ',' <<argv[3] << ',' <<argv[4] << ',' <<argv[5] <<endl;

Rückkehr 0;
}

Beachten Sie hier, dass das Array 'char *argv[argc]' als 'char** argv' deklariert wurde.

Wenn dieses Programm mit dem Terminalbefehl ausgeführt wird,

./temporäre Artikel3Buchstift'großes Haus'

dann wäre die Ausgabe:

./Temperatur, Artikel,3, Buch, Stift, großes Haus

Beachten Sie, dass der Verzeichnispfad im Namen der ausführbaren Datei enthalten ist.

Beachten Sie auch, dass beim Ausführen des Programms (Aufruf des Programms) der Wert für argc nicht gesendet wurde.

Abschluss

Die iostream-Klasse hat vier wichtige Objekte, nämlich cout, cin, cerr und clog. cin ist ein Eingabeobjekt, während der Rest Ausgabeobjekte sind. Während ein Programm läuft, unterscheidet sich die Eingabe in das Programm davon, wenn das Programm mit der Ausführung beginnen soll. Wenn ein Programm ausgeführt wird, wird die Eingabe in das Programm mit dem Befehl zum Ausführen des Programms verbunden, getrennt durch Leerzeichen.