2017-05-16 273 views
0

當我使用「char」數據類型的cin.peek()時,它工作得很好,但它不適用於「字符串」數據類型。 這工作得很好: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」它打印「哈」,但 下面的代碼不列入做同樣的工作:

#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()
返回輸入序列中的下一個字符,而不提取它:字符留在下一個要從流中提取的字符中。

爲了您的兩個代碼輸入是dce

在第一碼

char a; 
cin>>a 

d從輸入緩衝帶和ce仍然在裏面,所以當你做cin.peek()它獲取下一個來自緩衝區的字符是c。 但對於第二個代碼

string a; 
cin>>a; 

由於數據類型爲String它從輸入流緩衝區整個dce當你這樣做cin.peek()它會檢查是否有流中的任何東西,但現在還沒有。 因此它返回EOF

如果沒有更多的字符在輸入序列中讀取,或者如果 任何內部狀態標誌被設置時,該函數返回結束文件 值(EOF),以及留下適當的內部狀態標誌集:

+0

非常感謝你。這真的很有幫助 – user6321887