C++ C++;:如何检查cin缓冲区是否为空?
如何检查用户在cin命令中是否没有输入任何内容,只需按enter键?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; 如
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 !! ";
}