Unterschied zwischen cin und cin.get() für char-array
Ich habe diese 2 codes:
char a[256];
cin>>a;
cout<<a;
und
char a[256];
cin.get(a,256);cin.get();
cout<<a;
und vielleicht, relativ zu dem zweiten ein, ohne cin.get();
char a[256];
cin.get(a,256);
cout<<a;
Meine Frage ist die (erste) : für ein char-array, was sollte ich verwenden? cin oder cin.get()? Und warum sollte ich cin.get(); ohne parameter, nachdem mein char Initialisierung?
Und meine zweite Frage ist: meine c++ Lehrer lehrte mich, jedes mal, wenn cin.get() für die Initialisierung chars und NACH jeder Initialisierung char-array oder ein int-array oder einfach nur int oder was auch immer, wieder cin.get(); nach. Das ist, was ich Fragen wollte zunächst.
So, jetzt habe ich diese 2:
In diesem Fall, ohne cin.get() nach der Initialisierung integer, mein Programm wird brechen und ich kann nicht mehr tun, meine char initialisieren.
int n;
cin>>n;
char a[256];
cin.get(a,256); cin.get(); //with or without cin.get();?
cout<<a;
Und die richtige:
int n;
cin>>n; cin.get();
char a[256];
cin.get(a,256); cin.get(); //again, with or without?
cout<<a;
Also, was ist die Materie? Bitte jemand erklären, für jeden Fall ! Danke.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie verschiedene Dinge tun, so wählen Sie je nachdem, welcher tut, was Sie wollen, oder bessere alternativen, die unten gegeben werden.
Den ersten
cin>>a;
liest ein einzelnes Wort, das überspringen über alle führenden Leerzeichen, und beenden, wenn es auf ein Leerzeichen (das umfasst die am Ende der Zeile).Zweiten
cin.get(a,256);cin.get();
liest eine ganze Zeile, dann verbraucht der end-of-line-Zeichen, so dass sich wiederholende Lesen der nächsten Zeile.cin.getline(a,256)
ist ein wenig eleganter Weg, dies zu tun.Dritten
cin.get(a,256)
liest eine ganze Zeile, lässt aber die end-of-line-Zeichen in den stream, so dass wiederholte dies gibt keine mehr input.In jedem Fall erhalten Sie eine Art von Kranken Verhalten, wenn der Eingang Wort/Zeile länger ist als die fixed-size-buffer. Aus diesem Grund, sollten Sie in der Regel ein freundlicher Typ string:
Der string wird wachsen, um Platz für jede Menge input.
Das problem, wahrscheinlich ist die Art, wie Sie die Werte eingeben, die später auf. Die
cin.get()
nach jeder Initialisierung ist es zu "greifen" das newline-Zeichen, wird in gesetzt, die in den stream jedes mal, wenn Sie drücken Sie die EINGABETASTE.Sagen Sie beginnen mit der Eingabe Ihrer Werte wie diese:
Vorausgesetzt Sie enter gedrückt haben, nach 2, das neue-Zeile-Zeichen war auch auf dem stream. Wenn Sie anrufen
cin.get()
danach, Sie werden schnappen Sie und entfernen Sie das newline-Zeichen, so dass der rest des Codes, um richtig zu Holen die Eingabe.Zur Beantwortung Ihrer ersten Frage, für ein array verwenden, sollten Sie
cin.get
statt der überladenen operator>> cin>>
denn das würde nur greifen ein einziges Wort, und es wäre nicht die Menge der Zeichen, die packte, was dazu führen könnte, einen überlauf und Daten-Korruption /Programm abstürzt.Auf der anderen Seite
cin.get()
ermöglicht Ihnen die Angabe der maximalen Anzahl Zeichen, die gelesen, verhindern solche Fehler.Für ein char-array verwenden, cin.get (), weil es zählt Leerzeichen in der Erwägung, dass cin nicht und-viel wichtiger-setzt die maximale Anzahl Zeichen zu Lesen, zum Beispiel.
In diesem Fall können Sie nur geben Sie 24 Zeichen und ein null-terminator-Zeichen '/0'.
Ich hoffe, das beantwortet deine erste Frage.
Ich persönlich würde einen string.