我是C ++的新手,但我希望每个人都能解决问题。 因此,我制作了一个带有数字的列表,可以将其存储在该列表中。但是每次我想用KeyState检查列表中的内容时,它都会一直循环。
cout << "Which Number do you want to Store?" << endl;
int newNum;
cin >> newNum;
numberContainer.push_front(newNum);
cout << "To Show Numbers you stored press N" << endl;
if (GetKeyState(0x4E))
{
//Show all Numbers which are stored
Dump();
}
这就是我的转储方法
for (int i = 1; i < numberContainer.size(); i++)
{
cout << "Position: " << i;
for (it = numberContainer.begin(); it != numberContainer.end(); it++)
{
cout << " stored Number: " << *it << endl;
break;
}
}
最后我有一个GameLoop方法,它有一个While方法,第一个方法是我存储数字的方法
答案 0 :(得分:3)
GetKeyState
未阻止。因此,在您的程序中,用户必须在提交数字后立即按下键。如果用户未这样做,则会提示输入下一个数字。
也许这会给您您想要的东西:
cout << "Which Number do you want to Store?" << endl;
int newNum;
cin >> newNum;
numberContainer.push_front(newNum);
char key;
do {
cout << "Enter 'N' to show the numbers you have stored or 'C' to continue adding numbers." << flush;
cin >> key;
if (key == 'N') {
//Show all Numbers which are stored
Dump();
}
} while (key != 'C');
另外,我建议您添加一些退出选项,例如if (key == 'Q') exitOuterLoop = true;
。
顺便说一句,您的Dump()
函数是完全错误的。
它输出容器的第一个元素(size-1)次,因为它从1循环到(size-1),并在无条件脱离内部循环之前在内部循环中输出第一个元素。绝对没有道理。
我想它应该像这样:
for (size_t i = 0; i < numberContainer.size(); i++) {
cout << "Position: " << (i+1)
<< " stored Number: " << numberContainer[i] << endl;
}
或者-如果您的容器不支持随机访问:
{
unsigned int i = 0;
for (auto const & element : numberContainer) {
++i;
cout << "Position: " << i
<< " stored Number: " << element << endl;
}
}