首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++ |接受用户输入,但不给出值

C++ |接受用户输入,但不给出值
EN

Stack Overflow用户
提问于 2017-05-06 12:10:51
回答 2查看 763关注 0票数 1

我可以看出标题可能有点令人困惑。基本上,我希望用户按enter键10次以结束循环。但实际上我必须输入一些东西才能计数,我估计这是因为我给了“无用的”一个数据类型char,但我应该给它分配什么,这样我只需按enter键,它就会接受呢?谢谢!

代码语言:javascript
复制
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;

}
EN

回答 2

Stack Overflow用户

发布于 2017-05-06 12:23:49

您可以在流上使用IO操纵器std::noskipws,但是因为它是cin,所以您可能不想让它处于该状态。而且你必须保存/恢复之前的状态,才能很好地处理程序的其他部分。

一种更简单的方法是像下面这样循环:

代码语言:javascript
复制
while( cin && cin.get() != '\n' );

现在,如果流失败,您想要中断您的循环。你可能想把它包装得更好一些:

代码语言:javascript
复制
istream & wait_enter( istream & s )
{
    while( s && s.get() != '\n' );
    return s;
}

然后你就有了:

代码语言:javascript
复制
do {
    if( !wait_enter(cin) ) break;
    durability -= 1;
    cout << "Durability: " << durability << endl;
} while (durability > 0);

由于IO操纵器的工作方式,您甚至可以这样做(如果您喜欢这种风格):

代码语言:javascript
复制
    if( !(cin >> wait_enter) ) break;
票数 3
EN

Stack Overflow用户

发布于 2017-05-06 13:05:50

感谢大家的帮助!

我发现

代码语言:javascript
复制
cin.get(useless);

成为解决这个问题的最简单、最有帮助的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43816632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档