Heim >Backend-Entwicklung >C++ >Wie geht „cin' mit Eingaben in C um und warum wird „getline()' zum Lesen ganzer Zeilen bevorzugt?

Wie geht „cin' mit Eingaben in C um und warum wird „getline()' zum Lesen ganzer Zeilen bevorzugt?

Linda Hamilton
Linda HamiltonOriginal
2024-10-30 09:12:27677Durchsuche

How does `cin` handle input in C   and why is `getline()` preferred for reading entire lines?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn