我可以看到标题可能有点令人困惑。基本上我希望用户按下输入10次以结束循环。但是我必须实际输入一些东西来计算它,我认为这是因为我给了'无用'一个数据类型的char,但我会分配它,所以我可以按Enter键,它需要吗?谢谢!
void mineFunc(){
//Mining Function
int durability = 10;
char useless; //Just so user can tap enter to 'mine'
cout << "Tap Enter to Mine" << endl;
do {
cin >> useless;
durability -= 1;
cout << "Durability: " << durability << endl;
} while (durability > 0);
gold += 5;
}
答案 0 :(得分:3)
好吧,您可以在流上使用IO操纵器std::noskipws
,但由于它是cin
,您可能不希望将其置于该状态。而且你必须保存/恢复以前的状态才能与程序的其他部分一起玩。
更简单的方法是循环如下:
while( cin && cin.get() != '\n' );
现在,如果流失败,您想要突破循环。你可能想要把它包装好一点:
istream & wait_enter( istream & s )
{
while( s && s.get() != '\n' );
return s;
}
然后你有:
do {
if( !wait_enter(cin) ) break;
durability -= 1;
cout << "Durability: " << durability << endl;
} while (durability > 0);
由于IO操纵器的工作原理,你甚至可以这样做(如果你喜欢这种风格):
if( !(cin >> wait_enter) ) break;
答案 1 :(得分:0)
您可以使用std::getline
。如果您使用空行按 Enter ,getline
将返回一个空行。
std::string dummyLine;
while ( durability > 0 && getline(std::cin, dummyLine) )
{
--durability;
}
在while
语句中使用上述条件可确保如果输入EOF
,则循环退出并且永远不会卡在那里。
答案 2 :(得分:0)
感谢大家的帮助!
我找到了
cin.get(useless);
是解决此问题最简单最有用的方法。