[英]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 Doe
, name
的值將是John Doe
並且cin
不會有任何數據。 此外,這還可以讓您測試用戶是否只是輸入:
std::string name;
getline(std::cin, name);
if (name.empty()) {
/* ... nothing entered ... */
}
使用這種方法的缺點是,如果要讀取格式化的數據行, int
或double
,則必須從字符串中解析表示。 我個人認為這是值得的,因為如果用戶輸入無效的東西並且“保護” 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.