簡體   English   中英

C ++:如何檢查cin緩沖區是否為空?

[英]C++: how do I check if the cin buffer is empty?

你怎么檢查用戶是否沒有在cin命令輸入任何東西,只需按Enter鍵?

std :: cin讀取時,最好不要使用流提取操作符 >>因為它可能有各種令人討厭的副作用。 例如,如果您有此代碼:

std::string name;
std::cin >> name;

然后我進入John Doe ,那么從cin讀取的行只會保留John的值,讓Doe落后於未來的某些讀取操作。 同樣,如果我寫:

int myInteger;
std::cin >> myInteger;

然后我輸入John Doe ,然后cin將進入錯誤狀態,並且在您明確清除其錯誤狀態並刷新導致錯誤的字符之前,將拒絕執行任何將來的讀取操作。

進行用戶輸入的更好方法是使用std :: getline從鍵盤讀取字符,直到用戶輸入為止。 例如:

std::string name;
getline(std::cin, name); // getline doesn't need the std:: prefix here because C++ has ADL.

ADL代表依賴於參數的查找。 現在,如果我輸入John Doename的值將是John Doe並且cin不會有任何數據。 此外,這還可以讓您測試用戶是否只是輸入:

std::string name;
getline(std::cin, name);

if (name.empty()) {
    /* ... nothing entered ... */
}

使用這種方法的缺點是,如果要讀取格式化的數據行, intdouble ,則必須從字符串中解析表示。 我個人認為這是值得的,因為如果用戶輸入無效的東西並且“保護” cin從進入失敗狀態,它會讓你更細粒度地控制該怎么做。

我教了一門C ++編程課程,並且有一些關於流庫的講義,這些關於如何以安全的方式(主要在本章末尾)從cin讀取格式化數據的詳細信息。 我不確定你會發現這個有用,但是如果它有用,我想我會發布鏈接。

希望這可以幫助!

除非用戶輸入至少1個字符(輸入不計算),否則cin將不會繼續該程序。 如果用戶沒有給出任何輸入,cin將一直等待用戶輸入,然后按回車鍵。

簡單的方法>>

{
char X=0; //  ASCII( 0 ) means a NULL value
cin>>X;
if(X==0 || X==10) // ASCII( 10 ) means ENTER
cout<<"User din't enter ANYTHING !! ";
}

但一個簡單的問題是....

cin只是不允許你在沒有輸入角色的情況下進一步移動

在這里我的意思是DIGIT或字母或特殊符號,而不是空格,輸入null等

希望這能解決你的問題,如果沒有,我很樂意幫助我告訴你。

int main(){ 
string str[100];
std::cout<<"Hello how are you ? \n";
std::cin>>str;
if(str.length() > 0){
// If input is seen
}
else{
// If input is not seen
}
}

有任何問題讓我知道。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM