C ++ |在不给出值的情况下获取用户输入

时间:2017-05-06 04:10:51

标签: c++ input

我可以看到标题可能有点令人困惑。基本上我希望用户按下输入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;

}

3 个答案:

答案 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);

是解决此问题最简单最有用的方法。