C ++:如何检查cin缓冲区是否为空?

问题描述 投票:28回答:4

你怎么检查用户是否没有在cin命令输入任何东西,只需按Enter键?

c++ input cin
4个回答
41
投票

当从std::cin阅读时,最好不要使用stream extraction operator >>,因为它可能有各种令人讨厌的副作用。例如,如果您有此代码:

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 ++编程课程,并且有some lecture notes about the streams library,它详细介绍了如何以安全的方式从cin读取格式化数据(主要在本章末尾)。我不确定你会发现这个有用,但是如果它有用,我想我会发布链接。

希望这可以帮助!


3
投票

除非用户输入至少1个字符(输入不计算),否则cin将不会继续该程序。如果用户没有给出任何输入,cin将一直等待用户输入,然后按回车键。


-4
投票

简单的方法>>

{
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等

希望这能解决你的问题,如果没有,我很乐意帮助我告诉你。


-6
投票
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
}
}

有任何问题让我知道。

© www.soinside.com 2019 - 2024. All rights reserved.