Verhalten des C-Eingabestreams mit „cin“
Beim Lesen von Eingaben mithilfe des „cin“-Streams in C ist es wichtig zu verstehen, wie es funktioniert interagiert mit verschiedenen Datentypen. Standardmäßig liest „cin“ jeweils ein Wort, was beim Umgang mit Zeichenarrays oder Zeichenfolgen zu unerwartetem Verhalten führen kann.
Im bereitgestellten Codebeispiel ist die Methode „input()“ in der Datei „String " Klasse verwendet "cin >>" um die Eingabezeichenfolge zu lesen. Diese Anweisung erfasst jedoch nur ein einzelnes Wort und ignoriert alle nachfolgenden Wörter in der Eingabe. Wenn die Eingabe mehrere Wörter enthält, beispielsweise „steve hawking“, wird daher nur das erste Wort, „steve“, im Array „str“ gespeichert.
Lösung: Verwenden von getline( ) zum Lesen vollständiger Zeilen
Um eine vollständige Eingabezeile in ein Zeichenarray einzulesen, kann die Funktion „getline()“ anstelle von „cin >>“ verwendet werden. Hier ist die aktualisierte Eingabemethode mit „getline()“:
<code class="c++">void input() { cout << "Enter string :"; cin.getline(str, sizeof str); }
„getline()“ benötigt zwei Argumente: einen Zeiger auf das Zielarray und die Größe des Arrays. Es liest die Eingabe, bis ein Zeilenumbruchzeichen gefunden wird, und erfasst so effektiv die gesamte Eingabezeile.
Zusätzliche Überlegungen
Es ist erwähnenswert, dass die Verwendung von Zeichenarrays zur Zeichenfolgenmanipulation möglich ist umständlich und fehleranfällig. Die C-Standardbibliothek stellt die Klasse „std::string“ bereit, die einen robusteren und typsichereren Ansatz für die String-Verarbeitung bietet. Anstatt Zeichenarrays zu verwenden, könnte der Code wie folgt umgeschrieben werden:
<code class="c++">#include <iostream> #include <string> class String { public: std::string str; void input() { cout << "Enter string :"; std::getline(std::cin, str); } void display() { std::cout << str; } };</code>
Schließlich ist die Verwendung von Header-Dateien wie „iostream.h“ und „conio.h“ veraltet. Moderne C-Entwicklung sollte Header-Dateien wie „iostream“ bzw. „conio“ verwenden.
Das obige ist der detaillierte Inhalt vonWie geht „cin' mit Eingaben in C um und warum wird „getline()' zum Lesen ganzer Zeilen bevorzugt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!