41

您如何检查用户是否没有在 cin 命令中输入任何内容而只是按下回车键?

4

4 回答 4

58

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(主要在本章末尾)。我不确定你会发现这个有多有用,但如果它有帮助,我想我会发布链接。

希望这可以帮助!

于 2011-02-15T03:49:09.763 回答
4

cin 将不会继续程序,除非用户输入至少 1 个字符(输入不计算在内)。如果用户没有提供任何输入,cin 将一直等待用户提供输入,然后按 Enter。

于 2011-02-15T03:42:46.633 回答
-6

简单的方法>>

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

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

于 2011-02-15T06:03:40.790 回答
-7
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
}
}

有什么问题告诉我。

于 2011-02-15T03:42:35.567 回答