Wenn wir ein Programm in einer beliebigen Programmiersprache schreiben, ist das Empfangen von Eingaben die grundlegende Aufgabe, die wir in fast allen Programmen erledigen. Manchmal erhalten wir Eingaben direkt von der Konsole und manchmal erhalten wir Eingaben aus einer Datei. Eingaben aus einer Datei zu erhalten hat gewisse Vorteile, da wir sie nicht immer wieder eingeben müssen und manchmal können wir einige gute Eingabetestfälle in einer Datei speichern. In diesem Artikel konzentrieren wir uns jedoch auf die konsolenbasierte Eingabe. Wir lernen verschiedene Techniken kennen, um in C++ Eingaben vom Benutzer zu erhalten.
Es gibt verschiedene Möglichkeiten, Eingaben von der Konsole zu erhalten. Einige davon sind C-ähnliche Methoden, während andere Eingabeströme verwenden, die in C++ vorhanden sind. Wir werden sie einzeln behandeln und einige Beispiele zum besseren Verständnis bereitstellen.
In der Sprache C verwenden wir die Funktion scanf(), um die Eingabe von der Konsole in Form einer formatierten Zeichenfolge zu scannen. Diese Funktion ist auch in C++ verfügbar. Um Eingaben formatiert zu empfangen, können Sie die Methode scanf() verwenden.
Grundlegende Syntax der scanf()-Methode, einschließlich Formatzeichenfolge.
scanf ( “<format string>”, <address of variable> );
scanf() formatierter Formatbezeichner.
Formatbezeichner | Die chinesische Übersetzung vonBeschreibung | lautet:Beschreibung |
---|---|---|
%c | Für die Eingabe einzelner Zeichen | |
%s | Für Zeichenfolgen ohne Leerzeichen | |
%Hallo | Kurze Ganzzahl mit Vorzeichen | |
%hu | Kurze Ganzzahl ohne Vorzeichen | |
%Lf | Langes Doppel | |
%d | Dezimalzahl (mit Vorzeichen), Basis 10 angenommen | |
%i | Ganzzahl (Basis automatisch erkennen) | |
%o | Oktale Ganzzahl | |
%x | Hex-Ganzzahl | |
%p | Zeiger | |
%f | Gleitkommazahlen |
#include <iostream> using namespace std; void takeInput() { int x; char s[50]; // C like string or character array char c; float f; cout << "Enter an integer: "; scanf( "%d", &x ); cout << "\nYou have entered an integer: " << x << endl; cout << "Enter a character: "; scanf( " %c", &c ); cout << "\nYou have entered a character: " << c << endl; cout << "Enter a float value: "; scanf( "%f", &f ); cout << "\nYou have entered float value: " << f << endl; cout << "Enter a string: "; scanf( "%s", s ); //string do not need address //convert to C++ like string from C like string string SCpp; SCpp.assign(s); cout << "\nYou have entered the string: " << SCpp << endl; } int main(){ takeInput(); }
Enter an integer: 5 You have entered an integer: 5 Enter a character: K You have entered a character: K Enter a float value: 2.56 You have entered float value: 2.56 Enter a string: HelloWorld You have entered the string: HelloWorld
Diese Methode funktioniert für andere Datentypen, akzeptiert jedoch für Zeichenfolgen nur C-ähnliche Zeichenfolgen oder Zeichenarrays. Um einen String mit „cout“ anzuzeigen, müssen wir ihn in ein C++-ähnliches String-Objekt konvertieren. Andernfalls können wir die Funktion printf() verwenden, um die Ausgabe anzuzeigen. Dies sind grundlegende Beispiele. Sehen wir uns nun die Auswirkung der Formatierung der Zeichenfolge im nächsten Beispiel an.
#include <iostream> using namespace std; void takeInput() { int dd, mm, yyyy; cout << "Enter a date in dd-mm-yyyy format: "; scanf( "%d-%d-%d", &dd, &mm, &yyyy ); cout << "\nThe given date is: "; printf( "%d/%d/%d", dd, mm, yyyy ); } int main(){ takeInput(); }
Enter a date in dd-mm-yyyy format: 14-10-2022 The given date is: 14/10/2022
In diesem Beispiel erhalten wir Eingaben im Format (TT-MM-JJJJ). Für diese drei Ganzzahlwerte wird kein anderes Format akzeptiert. Und in unserer Ausgabe zeigen wir dasselbe Datum in einem anderen Format an (TT/MM/JJJJ). Dafür ist die formatierte String-Eingabe eigentlich gedacht. Als nächstes sehen wir uns ein einfacheres Formular an, das den Eingabestream „cin“ verwendet, um beliebige Datentypen direkt in eine angegebene Variable einzugeben.
cin ist eine C++-Eingabestream-Klasse, die den Extraktionsoperator >> verwendet, um Eingaben aus einem Stream abzurufen. Dieser Operator fügt automatisch einen Wert in die angegebene Variable ein, indem er Eingaben von der Konsole erhält. Die Syntax ist wie folgt.
Grundlegende Syntax der Cin-Methode
cin >> <input variable name>
#include <iostream> using namespace std; void takeInput() { int x; string s; char c; float f; cout << "Enter an integer: "; cin >> x; cout << "\nYou have entered an integer: " << x << endl; cout << "Enter a character: "; cin >> c; cout << "\nYou have entered a character: " << c << endl; cout << "Enter a float value: "; cin >> f; cout << "\nYou have entered float value: " << f << endl; cout << "Enter a string: "; cin >> s; cout << "\nYou have entered the string: " << s << endl; } int main(){ takeInput(); }
Enter an integer: 8 You have entered an integer: 8 Enter a character: L You have entered a character: L Enter a float value: 3.14159 You have entered float value: 3.14159 Enter a string: WeAreLearningC++InputTaking You have entered the string: WeAreLearningC++InputTaking
Wie andere Variablen können wir die Zeichenfolge direkt verwenden, anstatt sie als Zeichenarray zu haben. Bei dieser Methode wird die gegebene Eingabe automatisch einem String-Objekt zugewiesen. Allerdings gibt es ein Problem mit Saiten. Auf diese Weise können wir keine Zeichenfolgen mit mehreren Wörtern eingeben. Wenn wir eine Zeichenfolge mit mehreren Wörtern schreiben, wird nur das erste Wort benötigt. Sehen wir uns dies im folgenden Beispiel an.
#include <iostream> using namespace std; void takeInput() { string s; cout << "Enter a string: "; cin >> s; cout << "\nYou have entered the string: " << s << endl; } int main(){ takeInput(); }
Enter a string: Hello World, This is a nice day You have entered the string: Hello
Um dieses Problem zu lösen, müssen wir die Funktion getline() verwenden, um eine durch Leerzeichen getrennte Zeichenfolge zu erhalten. Bei dieser Methode wird das Lesen des Textes beendet, wenn ein Zeilenumbruchzeichen gefunden wird.
getline(std::cin, <string variable>)
#include <iostream> using namespace std; void takeInput() { string s; cout << "Enter a string: "; getline(cin, s); cout << "\nYou have entered the string: " << s << endl; } int main(){ takeInput(); }
Enter a string: Hello World, Have a nice day You have entered the string: Hello World, Have a nice day
In diesem Artikel haben wir verschiedene Verwendungsmöglichkeiten für das Lesen von Benutzereingaben mithilfe der Methode scanf() und des Cin-Streams gesehen. Die Zuweisung von Eingängen zu anderen Variablentypen ist unkompliziert. Allerdings akzeptieren weder der Formatbezeichner %s noch die Klasse cin Eingabezeichenfolgen mit Leerzeichen. Wie in der Sprache C gibt es in C++ eine spezielle Funktion zum Lesen einer Zeichenfolge mit durch Leerzeichen getrennten Wörtern. Sie können die Methode getline() verwenden, um diese Eingabezeichenfolge zu akzeptieren. Wir können auch Eingaben aus Dateien und String-Streams erhalten.
Das obige ist der detaillierte Inhalt vonC++-Programm, um Eingaben vom Benutzer zu erhalten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!