2016-07-21 6 views
0

Ich ging durch einen Code in meinem Schulbuch, in dem es eine Zeile gibt, deren Funktion es ist, den Eingabepuffer zu löschen (erwähnt als Kommentar im Code).Was bedeutet das Löschen des Eingabepuffers?

Ich konnte seinen Zweck nicht ganz verstehen. Es ist definitiv erforderlich, da seine Entfernung den Konsoleneingabeprozess durcheinanderbringt.

Bitte erklären Sie, was seine Funktion ist und was passiert, wenn ich es entferne.

Ich habe auch versucht mit cin.ignore(); und es funktioniert auch gut. Wie wird die Funktion hier verwendet, ist es ein exakter Ersatz von cin.ignore()?

P.S. In der Schule verwenden wir die ältere Version von C++. Daraus ergibt sich die „.h“ -Erweiterung, clrscr() ;, usw.

#include <iostream.h> 
#include <fstream.h> 
#include <conio.h> 

void main(){ 
clrscr(); 

ofstream fout("student.txt", ios::out); 
char name[30], ch; 
float marks = 0.0; 

for(int i = 0; i < 5; i++){ 
    cout << "Student " << (i+1) << ":\tName: "; 
    cin.get(name,30); 
    cout << "\t\tMarks: "; 
    cin >> marks; 
    cin.get(ch); //for clearing input buffer (This thing!) 
    fout << name << '\n' << marks << '\n'; 
} 

fout.close(); 

ifstream fin("student.txt", ios::in); 
fin.seekg(0); 
cout << "\n"; 

for(int i = 0; i < 5; i++){ 
    fin.get(name,30); 
    fin.get(ch); //Again 
    fin >> marks; 
    fin.get(ch); //Same 
    cout << "Student Name: " << name; 
    cout << "\tMarks: " << marks << "\n"; 
} 

fin.close(); 
getch(); 

} 

Antwort

0

ich nur mit Hinweis auf starten wollen, dass Sie nicht ‚die ältere Version von C++‘ verwenden. Sie verwenden nur einige c-Code (wie clrscr()) und c styled Programmierung und in der Tat wahrscheinlich nicht cpp11 oder cpp14. Auch Header-Dateien für C++ sind oft nur noch .h.

Nun ist die Antwort auf Ihre Frage:

cin.get(ch); 

Der '\ n' Charakter wird in ch lesen. '\ n' ist ein Zeichen, ein Zeilenumbruchzeichen.

macht in der Tat die gleichen wie

cin.ignore(); 

Es verwendet wird, um den Eingangspuffer zu löschen, was bedeutet, dass die leeren Zeilenende (‚\ n‘) aus dem Eingangspuffer gelöscht werden.

Warum ist das getan Sie fragen? This ist ein gutes Beispiel dafür, warum Sie das tun würden. Hoffe das hat dir geholfen!

+1

Nein, er läuft die "ältere" Version von C++. Höchstwahrscheinlich verwendet er Turbo C++, das eine vor-standard/nicht-Standard-Version von C++ ausführt. – NathanOliver

+0

@NathanOliver Meine schlechte, tut mir leid. Danke, dass du darauf hingewiesen hast. Sie müssen zugeben, dass "die ältere Version von C++" ziemlich komisch klingt. Ich dachte, er meinte "nicht cpp11 oder cpp14". –

+0

Ich bin ein Anfänger, wenn es um das Programmieren geht. Ja, ich benutze Turbo C++, ich dachte, dass es die ältere Version war, meine schlechte. Wie auch immer, sollte nicht cin.get (ch) eine Zeicheneingabe vom Benutzer nehmen und sie an "ch" übergeben? –

0
cin >> marks; 
cin.get(ch); //for clearing input buffer (This thing!) 

Dies ist eine nicht so robust Weg, um den Eingangspuffer des Löschens. Wenn Sie eine Zahl gefolgt von eingeben Geben Sie ein, die erste Zeile wird die Nummer konsumieren und den Wert in marks setzen, während die zweite Zeile das Zeilenumbruchzeichen lesen und verwerfen wird.

Es ist nicht robust, da es keine Leerzeichen berücksichtigt, die ein Benutzer hinter der Nummer eingegeben haben könnte. Eine robustere Methode wäre die Verwendung von istream::ignore.

cin >> marks; 
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');