C ++'switch'和'while'循环

时间:2011-11-23 21:39:22

标签: c++

我在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
}

3 个答案:

答案 0 :(得分:7)

您没有在循环中设置choice

您的代码事先只读取choice,因此如果它读取的第一个(也是唯一的)字符是'0',它将在第一次迭代时退出。但是,如果你的第一个字符不是'0',它将不会读取任何其他内容,它将永远运行。

如果您的程序挂起,我怀疑它的某些字符不是'0'。您可以通过检查(通过调试器或打印)循环中choice的实际值来验证/调试此内容。

答案 1 :(得分:3)

cin >> choice;属于while循环。

答案 2 :(得分:2)

您必须将cin >> choice; 放在 while - 循环中。否则你只是永远测试相同的choice。如果if (done) break ;为真,那么您之后添加的while)无效 - done - 循环无论如何都会退出。