在情况下,如何循环回到开关语句的开头

How to loop back to the beginning of a switch statement after a case

本文关键字:开关 语句 开头 循环 情况下 何循环      更新时间:2023-10-16

我有一个简单的问题,但我无法弄清楚。在下面的代码中,我希望能够将案例5重新显示后来的选项。我怎样才能做到这一点?预先感谢!

// Input the race of your character
    cout << "Choose a race here: " << endl
    << "1) Human, 2) Elf, 3) Dark Dwarf, 4) Commoner, 5) Race info, 6) Admin Debug Race : ";
    cin >> mCharRace;
    switch (mCharRace)
        {
        case 1:
        cout << "You have chosen Human!" << endl;
        mExpPoints = 999;
        mArmor = mArmor + 2;
        break;
    case 2:
        cout << "You have chosen Elf!" << endl;
        mAccuracy = mAccuracy + 2;
        mWeapon.mDamageRange.mLow = mWeapon.mDamageRange.mLow + 1;
        break;
    case 3:
        cout << "You have chosen Dark Dwarf!" << endl;
        mWeapon.mDamageRange.mHigh = mWeapon.mDamageRange.mHigh + 2;
        mMaxHitPoints = mMaxHitPoints + 3;
        break;
    case 4:
        cout << "You have chosen Commoner! Brave man." << endl;
        mAccuracy       = mAccuracy - 3;
        mHitPoints      = mHitPoints - 5;
        mMaxHitPoints   = 8;
        mExpPoints      = -250;
        mNextLevelExp   = 1500;
        mArmor          = -1;
        break;
    case 5:
        cout << "Placeholder for explanation text." << endl;
        break;
    case 6:
        cout << "ADMIN POWERS UNITE!!!!!!!" << endl;
        mAccuracy       = 20;
        mHitPoints      = 1000;
        mMaxHitPoints   = 1000;
        mExpPoints      = 0;
        mNextLevelExp   = 1000;
        mArmor          = 100;
        mWeapon.mName   = "Admin Sword of HNNNG!";
        mWeapon.mDamageRange.mLow   = 100;
        mWeapon.mDamageRange.mHigh  = 150;
        mGold           = 1000000;
        break;

switch-case构造不是迭代构造。它只能选择某个情况并执行它。控制的流程无法恢复。

所以,您不能使用它来循环。将其包装在中,而 for 循环构造代替。

while(condition){
   switch (mCharRace){
   ...
   ...
   }
}

只需转动条件 false 时要停止循环时。

将输入和切换代码包装在循环中,并分配一个变量exitLoop以退出循环。默认情况下,将该变量设置为true,除非您想重复输入。在其中,将exitLoop设置为false。

在第一个cout

之前添加标签
label:
cout << "Choose a race here: " << endl
<< "1) Human, 2) Elf, 3) Dark Dwarf, 4) Commoner, 5) Race info, 6) Admin Debug Race : ";
cin >> mCharRace;
...

然后在案例5中,添加

goto label;

将其放入for(;;)循环中,然后使用continue代替break。在switch语句结束后,将另一个break放置在捕获确实要破坏的情况下:

for (;;)
{
    switch (x)
    {
    case case_that_wants_to_loop:
        // ...
        continue;
    case case_that_wants_to_break:
        // ...
        break;
    }
    break;
}