gpt4 book ai didi

c++ - Cin.get() 不等待按键,即使在它之前有 cin.ignore()

转载 作者:行者123 更新时间:2023-11-30 03:44:26 37 4
gpt4 key购买 nike

我是一个新手程序员,正在练习下面的这个程序。无论出于何种原因,在我的程序结束时,cin.ignore() 被编译器完全跳过并直接移动到 cin.get(),但是之前已经有一个按键,所以编译器完全跳过它并且无需等待按键即可完成程序。我试过将 cin.get() 和 cin.ignore() 放在 switch case 语句中,但出现了同样的错误。我在网上搜索了这个问题,但找不到与我的问题相关的任何内容。这是我的完整代码:

#include <iostream>
#include <cstdlib>
#include <cstring>


using namespace std;
class mobs
{
public:
mobs();
~mobs();
void define();
void dismi();
void getinfo();
int stat[2];
string name;
string bio;
protected:


int health;
int level;

};
mobs dragon;
mobs::mobs()
{

int stat[2];

}
mobs::~mobs()
{


}

int selection;

void mobs::dismi()
{
getinfo();
cout<<"Level:" <<level<<"Health:" <<health <<endl <<endl <<endl <<"Name:" <<name <<"Bio:" <<bio <<endl <<endl;

}

void mobs::getinfo()
{
define();

}

void mobs::define()
{
stat[0] = health;
stat[1] = level;

}


int main()
{
dragon.stat[0] = 100;
dragon.stat[1] = 13;
dragon.name = "Ethereal Dragon, Dragon of the plane";
dragon.bio = "A dragon that can only be found in the ethereal plane.This dragon has traditional abilites such as flight and the ability to breath fire. The Ethereal Dragon's other known abilites are teleportation or magic.";


cout<<"Welcome to the Mob Handbook. " <<endl <<endl <<"Please make a selection "<<endl;
cout<<"1.Ethereal Dragon" <<endl<<"2." <<endl<<endl <<">";
cin>>selection;
cin.ignore();
switch(selection)
{
case 1:
dragon.dismi();
break;
default:
cout<<"Invalid input";
break;

}

cin.ignore();
cin.get();
}

最佳答案

You are reading from an istream without checking the result , 这是一个反模式。

您应该检查 cin >> selection 的结果以查看是否可以从流中读取 int。如果不能,则 cin 流将处于错误状态,进一步尝试从中读取将立即返回,而不是阻塞等待输入。

if (cin>>selection)
{
switch (selection)
{
// ...
}
}
else
throw std::runtime_error("Could not read selection");

如果您添加该检查,您至少可以排除流错误,并可以尝试进一步调试。

关于c++ - Cin.get() 不等待按键,即使在它之前有 cin.ignore(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35470658/

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