Unterschied zwischen cin und cin.get () für char-Array

8

Ich habe diese 2 Codes:

%Vor%

und

%Vor%

und vielleicht relativ zum zweiten ohne cin.get ();

%Vor%

Meine Frage ist (erste): Was soll ich für ein Char-Array verwenden? cin oder cin.get ()? Und warum sollte ich cin.get () verwenden? ohne Parameter nach meiner char Initialisierung?

Und meine zweite Frage ist: Mein C ++ - Lehrer hat mir beigebracht, jedesmal cin.get () für Initialisierungszeichen und NACH jeder Initialisierung char array oder int array oder nur int oder was auch immer zu verwenden, um cin.get (); Danach. Das wollte ich anfangs fragen.

Also, jetzt habe ich diese 2: In diesem Fall, ohne cin.get () nach der Ganzzahl-Initialisierung, bricht mein Programm ab und ich kann meine char-Initialisierung nicht mehr machen.

%Vor%

Und das Richtige:

%Vor%

Also, was ist los? Bitte jemand für jeden Fall erklären! Danke.

    
Ruben P 14.04.2015, 14:48
quelle

3 Antworten

7

Sie machen verschiedene Dinge, also wählen Sie, was auch immer Sie wollen, oder die besseren Alternativen, die unten angegeben sind.

Das erste cin>>a; liest ein einzelnes Wort, überspringt alle führenden Leerzeichen und stoppt, wenn es auf ein Leerzeichen trifft (das das Ende der Zeile enthält).

Das zweite cin.get(a,256);cin.get(); liest eine ganze Zeile und verwendet dann das Zeilenende-Zeichen, so dass die nächste Zeile gelesen wird. cin.getline(a,256) ist eine etwas bessere Möglichkeit, dies zu tun.

Das dritte cin.get(a,256) liest eine ganze Zeile, aber hinterlässt das Zeilenende-Zeichen im Stream, so dass die Wiederholung keine weiteren Eingaben ergibt.

In jedem Fall erhalten Sie irgendeine Art von schlechtem Verhalten, wenn das Eingabewort / die Zeile länger als der Puffer fester Größe ist. Aus diesem Grund sollten Sie normalerweise einen freundlicheren String-Typ verwenden:

%Vor%

Die Zeichenfolge wird so vergrößert, dass sie beliebig viele Eingaben verarbeiten kann.

    
Mike Seymour 14.04.2015 14:58
quelle
3

Das Problem liegt höchstwahrscheinlich in der Art, wie Sie die Werte später eingeben. Der cin.get() nach jeder Initialisierung ist da, um das Newline-Zeichen zu "greifen", das bei jedem Drücken von Enter in den Stream gesetzt wird. Angenommen, Sie geben Ihre Werte wie folgt ein:

%Vor%

Wenn Sie die Eingabetaste nach 2 gedrückt haben, wird auch der Zeilenumbruch in den Stream eingefügt. Wenn Sie danach cin.get() aufrufen, wird das neue Zeilenzeichen abgefangen und verworfen, damit der Rest des Codes die Eingabe richtig erhalten kann.

Um Ihre erste Frage zu beantworten, sollten Sie für ein Array cin.get anstelle des überladenen Operators >> cin>> verwenden, da dies nur ein einzelnes Wort enthält und die Anzahl der gegriffenen Zeichen nicht begrenzen würde zu einem Überlauf und Datenbeschädigungen / Programmabsturz.

Andererseits können Sie mit cin.get() die maximale Anzahl der gelesenen Zeichen festlegen, um solche Fehler zu vermeiden.

    
Nazara 14.04.2015 15:02
quelle
2

Verwenden Sie für ein char-Array cin.get (), da es Leerzeichen zählt, während cin nicht die Anzahl der maximal zu lesenden Zeichen festlegt, die beispielsweise gelesen werden sollen.

%Vor%

In diesem Fall können Sie nur 24 Zeichen und ein Nullabschlusszeichen '/ 0' eingeben. Ich hoffe, das beantwortet deine erste Frage. Ich würde persönlich eine Zeichenfolge verwenden.

    
Michael Davis 14.04.2015 15:07
quelle

Tags und Links