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

Verwalten der Konsole mit den iOstream -Klassen in C ++
In der Computing ist die Konsole die Computertastatur und der Computermonitor. In der Vergangenheit wurde die Ausgabe direkt an den Monitorbildschirm und nicht an ein auf dem Monitor angezeigter Fenster gesendet. Für den gewöhnlichen Computerbenutzer verwenden Anwendungen heute den Monitor nicht explizit. Diese Anwendungen verwenden Windows, die auf dem Monitor angezeigt werden. Der Computerprogrammierer muss jedoch noch den Monitorbildschirm verwenden. Obwohl der Programmierer noch den Monitorbildschirm verwenden muss, erlaubt es ihm nicht, dies zu tun. Das Betriebssystem bietet ein Fenster, das den Monitorbildschirm simuliert. Im Windows -Betriebssystem wird dieses Fenster als Eingabeaufforderung bezeichnet. In dem Linux -Betriebssystem und seinen Varianten wird dieses Fenster als Terminal bezeichnet.

Es wird erwartet, dass der Leser bereits weiß, wie er die Eingabeaufforderung oder das Terminal verwendet. 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 von der Tastatur und Ausgabe an das Terminal zu erhalten, muss das Programm mit:

#enthalten
Verwenden von Namespace STD;

Artikelinhalt

  • Schmale Stream -Objekte des Standard -iOstreams
  • Zeichen und Zeichenfolgen von der Tastatur erhalten
  • Anzeigen und Löschen von Zeichen, bevor Sie die Eingabetaste drücken
  • Senden von Zeichen und Saiten an den Monitor
  • Argumente für ein C ++ - Programm
  • Abschluss

Schmale Stream -Objekte des Standard -iOstreams

Die iOstream -Klasse, die Standardobjekte, Cout, Cin, Cerr und Clog, wurden instanziiert und bereits in der Standardbibliothek. Der Programmierer benutzt sie nur, ohne sie wieder zu instanziieren.

Cout

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

Cout << "This is output.";

Cout ist ein Ausgabe -iSstream -Objekt in der Standardbibliothek, das bereits instanziiert ist. << 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 wird die umkämpfte Eingabeaufforderung rechts neben der Ausgabephrase angezeigt. Es geht nicht zur nächsten Zeile. "Endl" am Ende der folgenden Anweisung erzwingt alles, was vom Bildschirm auf die nächste Zeile gedruckt wird:

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

"Endl" ist eine vordefinierte Variable. Bildschirminhalt kann auch zur nächsten Zeile gezwungen werden, mit:

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

Mit der Verwendung von '\ n' werden alle Textzeilen möglicherweise immer noch nicht sofort auf dem Bildschirm angezeigt. "Endl" spült die vollständige Textzeile auf dem Bildschirm.

Hinweis: Eine an Cout gesendete Zeichenfolge ist in doppelten Zitaten, während ein gesendeter Zeichen in einzelnen Zitaten ist. Eine Reihe von Saiten und Zeichen kann in einer Erklärung gesendet werden, die jeweils vorangegangen sind << . All that will appear in one line at the output if '\n' is not in the series.

CIN

CIN ist das bereits instanziierte und in der Standardbibliothek verfügbar. Betrachten Sie das folgende Codesegment in der Funktion main ():

char txt [50];
Cout << "Enter a word and press Enter:" txt;
Cout << txt << endl;

Die erste Aussage erklärt ein leeres Array von 50 Zeichen. Die zweite Anweisung weist den Benutzer an, ein Wort in der nächsten Bildschirmzeile einzugeben und die Eingabetaste zu drücken. Beachten Sie die Verwendung von "Endl", die den Benutzer dazu zwingt, den Text in die nächste Zeile des Bildschirms einzugeben. Wenn der Benutzer Text eingibt, wird der eingegebene Text auf den Bildschirm wiedergegeben, während er in das CIN -Objekt geht. Nach der Eingabe 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 betragen. Beachten Sie die Verwendung des Extraktionsoperators >>. In der letzten Anweisung wird der eingegebene Text auf dem Bildschirm angezeigt.

CIN kann mehr als ein Wort von der Tastatur nehmen, die durch Räume getrennt ist. Diese Wörter müssen in verschiedene Variablen extrahiert werden. Das folgende Codesegment zeigt dies:

char txt [20];
int it;
float ft;
Cout << "Enter 3 values and press Enter:" txt >> IT >> ft;
Cout << txt << " << it << " << ft << endl;

Beachten Sie die Anweisung:

cin >> txt >> it >> ft;

Das erste Wort wird TXT, dem nächsten und dem letzten an ft extrahiert. Wenn der Eingang wäre,

ein 25 3.6

Dann wäre die Ausgabe des Codesegments,

ein 25 3.6

Cerr

Das folgende Programm hat einen Fehler:

#enthalten
Verwenden von Namespace STD;
int main ()

in myint;
Rückkehr 0;

Die erste Aussage in Main () ist nicht korrekt. Wenn der Name der Datei mit dem Code „Temperatur ist.CC ”und die resultierende ausführbare Datei werden als„ Temps “bezeichnet. Der folgende G ++ -befehl sendet die Compiler -Fehlermeldung an die Datei„ Fehler.txt":

G ++ -O -Tempemperatur.CC 2> Fehler.txt

Wenn die Datei „Fehler“.txt ”existiert nicht, es würde erstellt werden. Beachten Sie den Teil „2> Fehler.txt ”des G ++ - Befehls.

Der Bildschirm ist das Standardausgangsziel und auch das Standardfehlerziel. Wenn „2> Fehler.TXT ”wird aus dem Befehl g ++ weggelassen, dann wird die Compiler -Fehlermeldung an das Standardfehlerziel gesendet, das immer noch der Bildschirm ist (Monitor).

Das Stream -Objekt, das das Standardausgangsziel repräsentiert. Das Stream -Objekt, das das Standardfehlerziel repräsentiert. Ein Programm -Laufzeitfehler kann wie folgt an den Bildschirm gesendet werden:

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

verstopfen

Eine Anwendung nimmt zu unterschiedlichen Zeiten unterschiedliche Eingaben. Alle Eingänge können auf dem Bildschirm neu gespielt werden. Alle Eingänge können in einer Datei gespeichert werden. Dies ist Protokollierung. Das Standardprotokollierungsziel ist der Bildschirm. Das Standard -Protokollierungs -Stream -Objekt ist ein Clog. Der folgende Code wird den Eingabetxt auf den Bildschirm erneut veröffentlichen:

char txt [50];
Cout<<"Enter text and press Enter:"txt;
verstopfen<

Wenn der Eingabetxt "input_text" lautet, würde Clog "input_text" zum Bildschirm erneut display-.

In der Praxis wird die Protokollierung normalerweise zu einer Datei umgeleitet. Das folgende Programm zeigt dies:

#enthalten
Verwenden von Namespace STD;
int main ()

Freopen ("log.txt "," w ", stdout);
Cout << "input_text" << endl;

Beachten Sie die Verwendung der Funktion Freopen () und ihrer Argumente. Sein erstes Argument ist der Name der Protokolldatei. Wenn die Datei nicht vorhanden ist, würde sie erstellt. Sein zweites Argument ist "W" für "schreiben". Sein drittes Argument ist STDOut für Standard-Output. Die zweite Anweisung in der Funktion main () verwendet Cout, um den Protokollierungstext an die Datei zu senden. Hinweis: Der tatsächliche Eingabescode wurde in diesem Programm nicht gezeigt.

Zeichen und Zeichenfolgen von der Tastatur erhalten

Während der Benutzer Eingaben eingeben, werden die Zeichen an den Eingabestream -Puffer gesendet und auf dem Bildschirm angezeigt. Wenn der Benutzer die Eingabetaste drückt, befinden sich alle Zeichen im Puffer. Außerdem geht der Cursor zum Beginn der nächsten Zeile unten auf dem Bildschirm. Das Programm setzt dann nach der Eingabe -Leserklärung mit der nächsten Programmanweisung fort.

Das CIN -Objekt hat Methoden, mit denen sich dieser Abschnitt befasst.

Lesen Sie den ersten Charakter

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

char ch;
Cout << "Input text:" << endl;
CIN.Holen Sie sich (ch);
Cout << ch << endl;

Die erste Aussage erklärt ein Zeichen ohne Zuweisung. Die zweite Anweisung fordert den Benutzer auf, ein Zeichen einzugeben. Wenn der Benutzer in das Zeichen eingreift und die Eingabetaste drückt, kopiert die dritte Anweisung das Zeichen aus dem Eingabestreampuffer in die Variable, CH.

Selbst wenn der Benutzer mehr als ein Zeichen eingeben würde, wird das erste Zeichen vom Codesegment genommen.

erhalten():
Get () ohne Argument gibt den Dezimal -ASCII -Code zurück. Betrachten Sie das folgende Codesegment:

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

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

get (char_type* s, streamSize n)

Nachdem der Benutzer eine Phrase eingegeben und die Eingabetaste gedrückt hat, können eine Reihe von Zeichen von der ersten aus dem CIN -Stream -Puffer extrahiert werden. Der folgende Code kann verwendet werden:

Char Str [10];
Cout << "Input text:" << endl;
CIN.Get (str, 10);
Cout << str << endl;

Wenn der Eingang "großartige Leute" ist, ist die Ausgabe "großartige Peo", von 9 Zeichen und nicht 10. Das Zeichenfolge NUL -Zeichen (\ 0) nimmt die zehnte Position im Get -Argument ein. Um 9 Zeichen in STR zu haben, muss die Speichergröße mindestens 10 sein, und das Argument Get () muss 11 sein. Wenn die gesamte Eingangslinie gewünscht ist, muss die Zeichenfolgennummer mindestens die Anzahl der getippten Zeichen sowie 1 sein. Wenn also 12 Zeichen für die gesamte Zeile getippt werden, sollte die Zahl 13 für die String (STR) -Speichergröße und 13 für das Get () Argument betragen. Beachten Sie, dass ein Raum als ein Zeichen gezählt wird.

get (char_type* s, streamSize n, char_type delim)
Es ist möglich, ein Unterstring zu extrahieren, das rechts, durch das erste Auftreten eines bestimmten Charakters oder durch das StreamSize des Unterstrings, das jemals an erster Stelle steht. Wenn der Eingabetext in den folgenden Code „großartige Leute“ lautet, wird „großartig“ extrahiert:

Char Str [30];
Cout << "Input text:" << endl;
CIN.Get (Str, 6, 'O');
Cout << str << endl;

Die sechste Position von Anfang an ist der Weltraumcharakter, der das extrahierte Substring ausschließlich begrenzt. Die sechste Position liegt an erster Stelle vor dem einzigen Charakter, "O". Beachten Sie, dass die Speichergröße für STR so hoch wie möglich sein kann.

Wenn der Eingabetext in den folgenden Code „großartige Personen“ lautet, wird „GR“ extrahiert:

Char Str [30];
Cout << "Input text:" << endl;
CIN.Get (str, 10, 'e');
Cout << str << endl;

Das erste Ereignis von 'e' steht vor der zehnten Position an erster Stelle.

Alle Charaktere einer Zeile bekommen

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

Cout << "Input text:" << endl;
während (1)
char ch = (char) cin.erhalten();
Cout << ch;
if (ch == '\ n')
brechen;

Das Gießen mit (char) wandelt jede Dezimalzahl in den entsprechenden ASCII -Zeichen um.

spähen()

Die Get () -Mitglied -Funktionen lesen nicht nur den nächsten Charakter; Sie entfernen es aus dem Streampuffer. Die Simple der Peek () -Mitgliedsfunktion liest jedoch das nächste Zeichen (ab dem ersten), ohne ihn aus dem Puffer zu entfernen. Im folgenden Code wird jedes Zeichen zuerst mit der Funktion peek () vor dem Entfernen durch die Funktion get () gelesen. All dies geschieht, nachdem der Benutzer die Eingabetaste gedrückt hat:

Cout << "Input text:" << endl;
während (1)
char ch = (char) cin.spähen();
Cout << ch;
CIN.erhalten();
if (ch == '\ n')
brechen;

Wenn die nächsten Charaktere nicht von get () entfernt würden, würde Peek () nur den ersten Charakter lesen, und die Schleife wird unbegrenzt durchlaufen.

Anzeigen und Löschen von Zeichen, bevor Sie die Eingabetaste drücken

Beachten Sie, dass mit dem CIN -Objekt die Eingabetaste gedrückt werden muss, bevor es Aktionen erfolgt. Nun, es ist möglich, dass Zeichen angezeigt werden, während sie tippt und gelöscht werden, bevor die Eingabetaste gedrückt wird. Dies bedeutet jedoch die Schnittstelle mit dem Betriebssystem. Betriebssysteme unterscheiden sich. Dies bedeutet also eine andere Codierung für verschiedene Betriebssysteme. Dieses Thema verdient also ein ganz anderes Tutorial - siehe später.

Senden von Zeichen und Saiten an den Monitor

Das Cout -Objekt ist ein Ausgabestream -Objekt, das bereits instanziiert und in der C ++ - Standardbibliothek vorhanden ist. Cout ist das Hauptobjekt, das zum Senden von Zeichen und Zeichenfolgen an den Monitor verwendet wird. Dies geschieht mit dem Insertionsbetreiber, << . 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.

Ausdrücke, die zu Skalaren führen, können Argumente für den Insertionsbetreiber sein. Der Bediener verwandelt den Skalar in Text und legt den Text in den Cout -Objektstrom ein. Wenn Text an das Cout -Objekt gesendet wird, wird normalerweise auf dem Bildschirm angezeigt (Monitor). Gelegentlich erscheint es jedoch nicht sofort. Um Text auf den Bildschirm auf den Bildschirm zu erzwingen, fügen Sie den besonderen Wert „Endl“ direkt nach dem Einfügen des Textes ein. Dies führt dazu, dass der Text auf den Bildschirm gespült wird, und eine neue Linie wird hinzugefügt. HINWEIS: '\ n' fügt einfach eine neue Zeile hinzu, spüle dem Bildschirm, spüle nicht den Text.

Das folgende Programm zeigt, wie die Werte von INT, Float und gewöhnlichem Text auf dem Bildschirm gedruckt werden:

#enthalten
Verwenden von Namespace STD;
int main ()

int it = 5;
float ft = 63.5;
Cout << "The " << it << " items cost $" << ft << " US." << endl;
Rückkehr 0;

Die Ausgabe ist:

Die 5 Artikel kosten $ 63.5 uns.

Das folgende Programm zeigt, wie die Zeichenfolge eines von einer Klasse instanziierten Objekts gedruckt wird:

#enthalten
Verwenden von Namespace STD;
strukturst
char str [11] = "Einige Wörter";
obj;
int main ()

Cout << obj.str << '\n';
Rückkehr 0;

Die Ausgabe ist "einige Wörter".

Argumente für ein C ++ - Programm

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

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

Rückkehr 0;

Angenommen, der Name der ausführbaren C ++ - Datei ist "temp". Angenommen, die Argumente, die das Programm aus seiner Umgebung (Betriebssystem) benötigt, die vom Benutzer eingegeben wird, ist,

Artikel 3 Buchstift "Big House"

Hier gibt es 5 Argumente: "Artikel", "3", "Buch", "Stift" und "Big House"

Jeder ist Text. Ein nummeriertes Argument für ein Programm ist Text. Mit anderen Worten, jedes Argument ist eine Zeichenfolge. "Big House" ist in Zitaten, weil es sich um einen Satz handelt. Der Terminalbefehl zum Ausführen dieses Programms wäre:

./Tempartikel 3 Buchstift "Big House"

Angenommen, die Dateitemperatur befindet sich im Heimverzeichnis. Beachten Sie, dass Räume und nicht Kommas die Argumente trennen.

In der Haupt () -Funktionssyntax ist ARGC nun 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] eine Reihe 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 Hinweise auf die Programmargumente in der in den Benutzer eingegebenen Bestellung des Benutzers. Die Größe dieses Arrays ist argc. In diesem Fall beträgt die Größe 1 + 5 = 6.

Nehmen wir an, dass bei der Zusammenstellung das folgende Programm mit dem Namen Temperatur heißt:

#enthalten
Verwenden von Namespace STD;
int main (int argc, char ** argv)

Cout << 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" erklärt wurde.

Wenn dieses Programm mit dem Terminalbefehl ausgeführt wird,

./Tempartikel 3 Buchstift "Big House"

Dann wäre die Ausgabe:

./Temp, Artikel, 3, Buch, Stift, Big House

Beachten Sie, dass der Verzeichnispfad in den Namen der ausführbaren Datei aufgenommen wurde.

Beachten Sie auch, dass im Ausführen des Programms (Anruf des Programms) der Wert für Argc nicht gesendet wurde.

Abschluss

Die iOstream -Klasse hat vier wichtige Objekte, die Cout, Cin, Cerr und Clog sind. CIN ist ein Eingangsobjekt, während der Rest Ausgabeobjekte sind. Während eines Programms unterscheidet sich die Eingabe des Programms von dem Zeitpunkt, in dem das Programm mit dem Rennen beginnen soll. Wenn ein Programm ausgeführt wird, wird die Eingabe des Programms mit dem Befehl zusammengefügt, um das Programm durch Spaces zu trennen.