你怎么检查用户是否没有在cin命令输入任何东西,只需按Enter键?
当从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 Doe
,name
的值将是John Doe
,并且在cin
中不会有任何数据。此外,这还可以让您测试用户是否只是输入:
std::string name;
getline(std::cin, name);
if (name.empty()) {
/* ... nothing entered ... */
}
使用这种方法的缺点是,如果你想读取格式化的数据行,int
或double
,你将不得不解析字符串中的表示。我个人认为这是值得的,因为如果用户输入无效的东西并且“保护”cin
从进入失败状态,它会让你更好地控制该怎么做。
我教C ++编程课程,并且有some lecture notes about the streams library,它详细介绍了如何以安全的方式从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
}
}
有任何问题让我知道。