gpt4 book ai didi

c++ - 为什么 cin.clear() 会修复由 cin 错误输入引起的无限循环?

转载 作者:行者123 更新时间:2023-11-30 04:22:38 26 4
gpt4 key购买 nike

我写了一个 switch 语句,并创建了一个默认值,它会简单地说用户选择了一个错误的选项并重复输入。我想确保如果出现问题,它会首先清除缓冲区,所以我使用了 cin.sync(),但输入 'a' 仍然会导致无限循环。我添加了 cin.clear() 来清除给了我工作代码的标志......但我的困惑是它为什么起作用。如果有失败标志,cin.sync() 是否不起作用?

声明如下,为简洁起见被截断:

while(exitAllow == false)
{
cout<<"Your options are:\n";
cout<<"1: Display Inventory\n";
/*truncated*/
cout<<"5: Exit\n";
cout<<"What would you like to do? ";

cin.clear(); //HERE IS MY CONFUSION//
cin.sync();
cin>>action;
switch(action)
{
case 1:
/*truncated*/
case 5:
exitAllow = true;
break;
default:
cout<<"\ninvalid entry!\n";
break;
}
}

最佳答案

一旦您尝试读取失败,流将被标记为处于失败状态,并且所有后续的读取尝试都将自动失败,直到您清除失败标志,这是通过clear() 函数。

您应该在每次读取之后检查流的状态:

if (cin >> var) {
// do something sensible
} else {
cin.clear();
}

否则,上次成功读取后存储在 var 中的值将被视为您算法的当前输入。

关于c++ - 为什么 cin.clear() 会修复由 cin 错误输入引起的无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13715131/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com