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

C++ C++;:如何检查cin缓冲区是否为空?,c++,input,cin,C++,Input,Cin,如何检查用户在cin命令中是否没有输入任何内容,只需按enter键?int main(){ 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 } } 字符串str[100]; std::coutstr; 如

如何检查用户在cin命令中是否没有输入任何内容,只需按enter键?

int main(){
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
}
}
字符串str[100]; std::coutstr; 如果(str.length()>0){ //如果看到输入 } 否则{ //如果没有看到输入 } }

任何问题请告诉我。

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

从中读取时,最好不要使用
>
,因为这可能会产生各种恶劣的副作用。例如,如果您有以下代码:

我输入
John Doe
,然后要从
cin
读取的行将只保留值
John
,留下
Doe
供将来的读取操作读取。同样,如果我要写:

int myInteger;
std::cin >> myInteger;
然后我输入
John Doe
,然后
cin
将进入错误状态,并将拒绝执行任何后续读取操作,直到您明确清除其错误状态并清除导致错误的字符

更好的用户输入方法是使用从键盘读取字符,直到用户按enter键。例如:

std::string name;
getline(std::cin, name); // getline doesn't need the std:: prefix here because C++ has ADL.
表示参数相关的查找。现在,如果我输入
John Doe
name
的值将是
John Doe
,并且
cin
中不会留下任何数据。此外,这还允许您测试用户是否刚刚按下enter键:

std::string name;
getline(std::cin, name);

if (name.empty()) {
    /* ... nothing entered ... */
}
使用这种方法的缺点是,如果要读取格式化数据行,
int
double
必须从字符串中解析表示。我个人认为这是值得的,因为如果用户输入了无效的内容并“保护”cin不进入失败状态,它可以让您更细粒度地控制该怎么做

<>我教了一个C++编程课程,并从安全性的角度(从本章末尾开始),对如何从<代码> 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 !! ";
}
{
char X=0;//ASCII(0)表示空值
cin>>X;
如果(X==0 | | X==10)//ASCII(10)表示输入

你可以走一行,数一数有多少个字符?我没有编译器,所以我无法检查。但是谢谢你告诉我。Istreams没有字符串指针的提取器(你的str是一个字符串数组)。你总是可以。另外,你分配了100个字符串。你可能是指
char[100]
@Marlon:希望他指的是string str;,但对于你的或我的,它仍然有问题。你为什么只是编造东西?几乎是真的;取决于你对cin的操作。@Fred Nurk-你能给我一个例子吗?Getline在另一个答案中提到,但cin.get和cin.ignore是其他的。谢谢你的回答,它真的帮助了我对于我正在开发的一个程序。我之所以写这条评论是因为我发现了一些有趣的东西。我有一个if-else语句,检查用户是否输入了“y”、“n”、其他什么东西,或者什么都没有。我发现该程序不会打到“什么都没有”除非我用这个案例来开始if-else,我不确定其他人是否也会这样。
{
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 !! ";
}