Originariamente inviato da Vinciokaboom
Per quanto riguarda il programma se potreste provarlo è meglio, però l'errore sta nel fatto che in alcuni casi esegue funzioni che non dovrebbe eseguire.
Non puoi essere un po' più preciso? Chiedere di tentare tutti i percorsi possibili in un programma "a bivi" è un po' eccessivo, specie considerando che noi non abbiamo bene in mente che cosa dovrebbe fare nelle tue intenzioni. Inoltre, hai letto il messaggio di Alex'87? È facile che, nell'indentazione diciamo "poco ordinata" del tuo programma abbia fatto confusione con break & co.

Il mio consiglio è indentare il codice in maniera coerente (in modo da vedere al volo dove si chiudono gli scope), e quindi controllare man mano che i break e le varie istruzioni di controllo del flusso siano dove devono stare. Per aggiustare ora l'indentazione, comunque, basta un tool automatico come astyle:
codice:
#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
    //generali
    int risposta;
    //scelte
    int sceltainiziale;
    int sceltamagia;
    int sceltabattaglia;
    //statistiche
    int atkmio=50;
    int difmio=50;
    int magiafuoco=0;
    int magiatempo=0;
    int magiascimmia=0;
    int hpmio=1000;
    int mpfuoco=30;
    int mptempo=30;
    int mpscimmia=30;
    //statistiche nemici 1
    int atknemico1=50;
    int difnemico1=30;
    int hpnemico1=150;
    cout<<"Sei il figlio illeggittimo del re, assaggia la vendetta e conquista il trono che ti spetta."<<endl<<endl;
    cout<<" Queste sono le tue statistiche ATK=50; DANNO MAGIA=0; DIF=50; PUNTI MAGIA=30; HP=1000."<<endl<<endl;
    cout<<"Sei davanti al castello di tuo padre, combatti i guerrieri."<<endl<<endl;
    cout<<"Hai due possibilità, cosa vuoi fare? Aumentare il tuo attacco [1], aumentare la tua difesa[2] o imparare una magia[3], cosa scegli?"<<endl<<endl;
    cin>>sceltainiziale;
    switch (sceltainiziale)
    {
    case 1:
        cout<<"Hai deciso di aumentare il tuo attacco, hai ricevuto una spada con del fuoco attorno[Shishkebab, attacco + 30!]"<<endl<<endl;
        atkmio = atkmio+30;
        mpfuoco = mpfuoco-30;
        mptempo= mptempo- 30;
        mpscimmia= mpscimmia - 30;

        break;

    case 2:
        cout<<"Hai deciso di aumentare la tua difesa, hai ricevuto uno scudo e un'armatura di maglia[scudo del re, armatura di maglia, difesa +30!]"<<endl<<endl;
        difmio = difmio+30;
        mpfuoco = mpfuoco-30;
        mptempo= mptempo- 30;
        mpscimmia= mpscimmia - 30;
        break;

    case 3:
        cout<<" Hai deciso di imparare una magia, premi un tasto a caso tra 1, 2, 3 e imparerai una magia."<<endl<<endl;
        cin>>sceltamagia;
        switch (sceltamagia)
        {
        case 1:
            cout<<"Hai imparato la magia del fuoco che potrai usare in alcune occasioni nella battaglia. [magia+47!]Questa magia ti diminurà gli mp di 3"<<endl<<endl;
            magiafuoco = magiafuoco+47;
            mptempo= mptempo- 30;
            mpscimmia= mpscimmia - 30;
            break;
        case 2:
            cout<<"Hai imparato la magia del tempo, tu sarai superveloce e i tuoi nemici saranno lentissimi[magia +67]Questa magia ti diminuirà gli mp di 5."<<endl<<endl;
            magiatempo = magiatempo+67;
            mpfuoco= mpfuoco- 30;
            mpscimmia= mpscimmia - 30;
            break;
        case 3:
            cout<<"Hai imparato la magia più potente, complimenti, trasformerai il tuo avversario in una scimmia con hp di 0 e vincerai. La potrai usare contro chi vuoi, una sola volta, tranne contro il boss finale.[magia + 1000!] Questa magia ti diminuirà i tuoi mp a 0."<<endl<<endl;
            magiascimmia = magiascimmia+1000;
            mpfuoco= mpfuoco- 30;
            mptempo= mptempo - 30;
        }//sceltamagia
    }//sceltainiziale
    if (hpnemico1<=0)
    {
        cout<<"Hai ucciso il tuo nemico!"<<endl<<endl;
    }
    else
    {
        do
        {
            cout<<"I tuoi hp:"<<hpmio<<endl;
            cout<<"I tuoi mpfuoco:"<<mpfuoco<<endl;
            cout<<"I tuoi mptempo:"<<mptempo<<endl;
            cout<<"I tuoi mpscimmia:"<<mpscimmia<<endl;
            cout<<"Hp del nemico"<<hpnemico1<<endl;
            cout<<"Un nemico! Cosa vuoi fare? [1] usa attacco, [2] usa magia fuoco, [3] usa magia tempo, [4] usa magia scimmia, [5] difenditi."<<endl;

            cin>>sceltabattaglia;
            switch (sceltabattaglia)
            {
            case 1:
                cout<<"Hai attaccato il primo nemico, i suoi hp scendono!"<<endl<<endl;
                hpnemico1=hpnemico1 - (atkmio-difnemico1);
                cout<<"Ugh!"<<endl;
                cout<<"Ti attacca anche lui, i tuoi hp scendono!"<<endl<<endl;
                hpmio= hpmio- atknemico1;
                if (hpnemico1<=0)
                {
                    cout<<"hai ucciso il nemico!"<<endl<<endl;
                    cout<<"COMPLIMENTI, HAI VINTO!"<<endl;
                    cout<<"premi [0] ";
                    cin>>risposta;
                }
                else
                {
                    cout<<"Premi [1]"<<endl<<endl;
                    cin>>risposta;
                }

                break;
            case 2:
                if (mpfuoco<3)
                {
                    cout<<"Non puoi usarla. Premi [2](non sbagliare tasto)";
                    cin>>risposta;
                }//chiusura if finiti mp
                else
                {
                    cout<<"Hai attaccato il primo nemico con la magia del fuoco"<<endl<<endl;
                    hpnemico1=hpnemico1 - (magiafuoco-difnemico1);
                    mpfuoco= mpfuoco - 3;
                    if (hpnemico1<=0)
                    {
                        cout<<"hai ucciso il nemico!"<<endl<<endl;
                        cout<<"COMPLIMENTI, HAI VINTO!"<<endl;
                        cout<<"premi [0] ";
                        cin>>risposta;
                    }//chiusura if
                    else
                    {
                        cout<<"Premi [1]"<<endl<<endl;
                        cin>>risposta;
                    }//chiusura else
                    break;
                }//chiusura else magia fuoco
            case 3:
                if (mptempo<5)
                {
                    cout<<"Non puoi usarla. Premi [2](non sbagliare tasto)";
                    cin>>risposta;
                }//chiusura if finiti mp
                else
                {
                    cout<<"Hai attaccato il nemico con la magia del tempo!"<<endl<<endl;
                    hpnemico1=hpnemico1 - (magiatempo-difnemico1);
                    mptempo= mptempo - 5;
                    if (hpnemico1<=0)
                    {
                        cout<<"hai ucciso il nemico!"<<endl<<endl;
                        cout<<"COMPLIMENTI, HAI VINTO!"<<endl;
                        cout<<"premi [0] ";
                        cin>>risposta;
                    }//chiusura if
                    else
                    {
                        cout<<"Premi [1]"<<endl<<endl;
                        cin>>risposta;
                    }//chiusura else
                    break;
                }//chiusura else magia tempo
            case 4:
                if (mpscimmia<30)
                {
                    cout<<"Non puoi usarla. Premi [2](non sbagliare tasto)";
                    cin>>risposta;
                }//chiusura if finiti mp
                else
                {
                    cout<<"Hai attaccato il nemico con la magia della scimmia, spero tu l'abbia usata bene!"<<endl<<endl;
                    hpnemico1=hpnemico1 - (magiascimmia-difnemico1);
                    mpscimmia= mpscimmia - 30;
                    if (hpnemico1<=0)
                    {
                        cout<<"Hai ucciso il nemico!"<<endl<<endl;
                        cout<<"COMPLIMENTI, HAI VINTO!"<<endl;
                        cout<<"premi [0] ";
                        cin>>risposta;
                    }//chiusura if
                    else
                    {
                        cout<<"Premi [1]"<<endl<<endl;
                        cin>>risposta;
                    }//chiusura else
                    break;
                }//chiusura else magia scimmia
            case 5:
                cout<<"Hai decido di difenderti dall'attacco del nemico!";
                hpmio=hpmio - (atknemico1-difmio);
                cout<<" Il nemico ti ha colpito!"<<endl<<endl;
                break;
            }//chiusura switchbattaglia
        }//chiusura do
        while (risposta==1);
        cout<<"Complimenti, ora si va avanti!"<<endl;
        system("PAUSE");
        return 0;
    }
}
Inoltre, un'altra cosa che puoi fare per rendere il tuo codice più leggibile (e quindi meno soggetto ad errori di controllo del flusso) è spezzarlo in funzioni (in maniera possibilmente sensata ), in modo da poter controllare facilmente una funzione alla volta che non contengano errori e quindi richiamarle via via dal main.