您如何检查用户是否没有在 cin 命令中输入任何内容而只是按下回车键?
4 回答
从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
。此外,这还可以让您测试用户是否只是按 Enter 键:
std::string name;
getline(std::cin, name);
if (name.empty()) {
/* ... nothing entered ... */
}
使用这种方法的缺点是,如果您想读取格式化的数据行、anint
或 a double
,您必须从字符串中解析出表示。我个人认为这是值得的,因为它可以让您更精细地控制如果用户输入无效的内容并“防止”cin
进入失败状态时该怎么做。
我教授一门 C++ 编程课程,并有一些关于流库的讲义,其中详细介绍了如何以安全的方式读取格式化数据cin
(主要在本章末尾)。我不确定你会发现这个有多有用,但如果它有帮助,我想我会发布链接。
希望这可以帮助!
cin 将不会继续程序,除非用户输入至少 1 个字符(输入不计算在内)。如果用户没有提供任何输入,cin 将一直等待用户提供输入,然后按 Enter。
简单的方法>>
{
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 只是不允许您在不输入字符的情况下进一步移动
这里的字符是指数字或字母或特殊符号,而不是空格,输入 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
}
}
有什么问题告诉我。