我在switch
循环中正确实现C ++ while
语句时遇到一些问题。
我正在测试char'0',但是当我在键盘上按下此键并按Enter键时,循环仍然继续。
为什么会这样?这可能与我的键盘或ASCII设置或其他内容有关吗?
这是我的来源:
#include "Character.h"
using namespace std;
int main()
{
char tmp;
Character* kite;
kite = new Player();
////////////////////////////
// Name
////////////////////////////
cout << "\n\t\tPlease enter your name:\n\t\t";
cin >> tmp;
kite->setName(tmp);
////////////////////////////
// Weapon
////////////////////////////
cout << "\n\n\t\tPlease select your weapon of choice:\n";
const int MAXITEMS = 3;
string lastItem;
string inventory[MAXITEMS] = {"Sword", "Staff", "Double Blades"};
string replaceItem;
string addItem;
// Print what is in inventory to start with
for (int i = 0; i < MAXITEMS; i++)
{
lastItem = inventory[i];
cerr << "\t\t" << i << ") " << inventory[i] << endl;
}
bool done = false;
char choice;
cin >> choice;
while (!done)
{
switch (choice)
{
case '0':
kite->setWeapon(inventory[1]);
done = true;
break;
}
if (done) //I added this in lately to try to overcome issue
{
break;
}
}
return 0;//exit code
}
答案 0 :(得分:7)
您没有在循环中设置choice
。
您的代码事先只读取choice
,因此如果它读取的第一个(也是唯一的)字符是'0'
,它将在第一次迭代时退出。但是,如果你的第一个字符不是'0'
,它将不会读取任何其他内容,它将永远运行。
如果您的程序挂起,我怀疑它的某些字符不是'0'
。您可以通过检查(通过调试器或打印)循环中choice
的实际值来验证/调试此内容。
答案 1 :(得分:3)
cin >> choice;
属于while
循环。
答案 2 :(得分:2)
您必须将cin >> choice;
放在 while
- 循环中。否则你只是永远测试相同的choice
。如果if (done) break ;
为真,那么您之后添加的while
)无效 - done
- 循环无论如何都会退出。