2017-05-16 15 views
0

Wenn ich cin.peek() mit einem "char" -Datentyp verwenden, funktioniert es einwandfrei, aber es funktioniert nicht mit "string" -Datentyp. das funktioniert gut:Wie funktioniert cin.peek() in C++?

#include<iostream> 
using namespace std; 
int main(){ 
    cout<<"enter a word"<<endl; 
    char a; 
    cin>>a; 
if(cin.peek()=='c'){ 
    cout<<"ha"<<endl; 
} 
return 0; 
} 

wenn Eingang "dce" druckt "ha" aber den Code unten tun doesnot die gleiche Arbeit:

#include<iostream> 
#include<string> 
using namespace std; 
int main(){ 
    cout<<"enter a word"<<endl; 
    string a; 
    cin>>a; 
if(cin.peek()=='c'){ 
    cout<<"ha"<<endl; 
} 
return 0; 
} 

ist nicht der String-Datentyp am besten geeignet weil wir Wörter in "a" Variablen speichern. Kann der Datentyp "char" verwendet werden, um Wörter oder nur einzelne Buchstaben zu speichern?

Antwort

2

cin.peek()
Gibt das nächste Zeichen in der Eingabesequenz zurück, ohne es zu extrahieren: Das Zeichen wird als das nächste aus dem Stream extrahierte Zeichen belassen.

Für Ihre beiden Codes die Eingabe dce

Im ersten Code

char a; 
cin>>a 

Es dauert nur d aus dem Eingangspuffer und ce ist noch drin, also wenn Sie cin.peek() tun bekommt er die nächste Zeichen aus dem Puffer, der c ist. Aber für die zweiten Code

string a; 
cin>>a; 

Als Datentyp wird Zeichenkette, die es dauert ganze dce von Eingangsstrompuffern und wenn Sie cin.peek() tun überprüft, ob es irgendetwas in dem Strom ist, aber jetzt ist es nicht. Daher gibt es EOF

Wenn es keine weiteren Zeichen in der Eingabesequenz zu lesen, oder wenn irgendwelche internen Zustand-Flags gesetzt wird, gibt die Funktion die End-of-file Wert (EOF), und hinterlässt die richtigen internen Statusflags:

+0

vielen Dank. Es war sehr hilfreich – user6321887