2017-05-16 10 views
0

"char"データ型でcin.peek()を使用すると完全に正常に動作しますが、 "string"データ型では機能しません。 これが正常に動作します:cin.peek()は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; 
} 

入力は「DCE」それが「HA」印刷しますが、 以下のコードであればdoesnot同じジョブを実行します。

#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; 
} 

は、文字列データ型ではない、より適切な"a"変数に単語を格納しているためです。単語を格納するために "char"データ型を使用できますか?

答えて

2

cin.peek()
入力シーケンスの次の文字を抽出せずに返します。文字はストリームから抽出される次の文字として残ります。

あなたの両方のコードの場合、入力はそれだけd入力バッファからを取るとce最初のコードでdce

char a; 
cin>>a 

であるが、それにまだある、あなたはcin.peek()を行う際には、次を取得しますバッファからの文字はcです。データ型として しかし、第二のコードのための

string a; 
cin>>a; 

は、入力ストリームバッファから全体dceを取り、あなたがcin.peek()を行うときに、それが何かをストリームに存在しているかどうかをチェックするが、現在は存在しない文字列です。入力シーケンスに読み込むためこれ以上文字がない場合 は、従ってそれはEOF

を返し、又は 任意の内部状態フラグが設定されている場合、機能は、エンドオブファイル 値(EOF)を返し、そして適切な内部状態フラグが設定されたままになります。

+0

非常にありがとうございます。本当に役に立ちました – user6321887

関連する問題