2 votes

Comment revenir au début d'une instruction switch après un cas ?

J'ai ce qui doit être un problème simple, mais je n'arrive pas à le résoudre. Dans le code ci-dessous, j'aimerais pouvoir faire en sorte que la case 5 réaffiche les options par la suite. Comment puis-je le faire ? Merci d'avance !

// 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;

11voto

Anirudh Ramanathan Points 25113

Une construction de type switch-case n'est pas une construction d'itération. Il ne peut que sélectionner un certain cas et l'exécuter. Le flux de contrôle ne peut pas remonter à cause de lui.

Donc, vous ne pouvez pas l'utiliser pour faire une boucle. Enveloppez-le dans un tandis que o pour construction en boucle à la place.

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

Tournez simplement condition a faux quand vous voulez arrêter la boucle.

6voto

lserni Points 19089

Enveloppez le code d'entrée et de commutation dans une boucle, et assignez une variable exitLoop pour sortir de la boucle. Définissez cette variable à VRAI par défaut, sauf dans les cas où vous voulez répéter l'entrée. Dans ce cas, mettez exitLoop à faux.

1voto

cjamesm Points 99

Ajoutez une étiquette avant votre premier 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;
...

puis dans le cas 5, ajoutez

goto label;

1voto

EJP Points 113412

Mettez-le dans un for(;;) et utiliser continue au lieu de break . En d'autres termes break après la fin de la switch pour attraper les cas qui veulent vraiment se casser :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X