Cannot exit a while loop, just continue it

Viewed 70

I got this code and the problem is that I can only continue the loop forever but i can't exit it. I have been struggling with this for quite some hours and figure out where i do wrong. I think that its mostly about the do while in the end but since I am new to this there might be somewhere else in the code.

#include <iostream>
using namespace std;
int main() {
    locale swedish("swedish"); 
    locale::global(swedish);

    int saldo = 1000;
    int bet;
    int vinst;
    char val;
    int nummer = 0;
    char spelaigen;
    char spelainteigen;
    
    /*Här "presenteras" programmet med lite cout's som mest välkomnar dig till roulett och ger dig ett saldo*/

    cout << "Username: Användare" << endl;
    cout << "Password: ********" << endl;
    cout << "Logging in: " << endl;
    cout << "Searching for a live room: " << endl;
    cout << "Initializing mainframe: \n" << endl;
    cout << "Välkommen till Save7heCasino" << endl;
    cout << "Här spelar du Roulette " << endl;
    cout << "Du har " << saldo << " att spela för." << endl;
    while (true)
    {
        cout << "Du får välja mellan 100, 300 eller 500 att spela för." << endl;
        cin >> bet;
        if (saldo < bet)
        {
            cout << "Ditt saldo är för lågt." << endl;
            break;
        }
        if (bet == 100)
        {
            cout << "Du valde insatsen 100:-" << endl;
            cout << "Ditt saldo är " << saldo - bet << endl;
        }
        else if (bet == 300)
        {
            cout << "Du valde insatsen 300:-" << endl;
            cout << "Ditt saldo är " << saldo - bet << endl;
        }
        else if (bet == 500)
        {
            cout << "Du valde insatsen 500:-" << endl;
            cout << "Ditt saldo är " << saldo - bet << endl;
        }
        else
        {
            cout << "Getfucl :)" << endl;
            break;
        }

        srand(time(0));
        int vinst = rand() % 36 + 1;
        cout << "\n";
        cout << "-Vinsttabell: " << endl;
        cout << "-Vinst: Färg ger 2x din insats." << endl;
        cout << "-Vinst: Nummer ger 10x din insats." << endl;
        cout << "\n";
        cout << "Vill spela på färg [1] eller nummer [2]: " << endl;
        cin >> val;
        /*Här väljer jag 1 eller 2 och deklarerar "val" till det nummret
        Om jag väljer 1 så kommer if-satsen under att köras och väljer jag 2 så kommer else if-satsen att köras
        Om jag väljer 1 så kommer den att deklarera om "val" för den nya input som blir, i detta fall "r" eller "b"
        och fortsätta att köras i en ny if-sats som hanterar inmatning 1 */

        /*Här kör jag en if-sats för svaret 1 som är färg, identifieraren "val" deklareras då ett nytt värde som
        matas in utav användaren som nu i sin tur får välja "r" eller "b". Det finns 2 if-satser för val 1, en för respektive färg, "r" och "b" som avgörs omÄ
        random funktionen är delbar eller inte vilket talar om utifall svaret blev rött eller svart.*/
        if (val == '1')
        {
            cout << "Vilken färg vill du spela? [r] för Röd och [b] för Svart " << endl;

            cin >> val;

            if (val == 'b')
            {
                if (vinst % 2 == 0)
                {
                    cout << "Resultatet blev Svart: " << vinst << endl;
                    saldo = saldo + bet * 2 - bet;
                    cout << "Du vann: " << bet + bet << endl;
                    cout << "Ditt nya saldo är: " << saldo << endl;

                }
                else
                {
                    cout << "Du förlorade resultatet blev Rött: " << vinst << endl;
                    saldo = saldo - bet;
                    cout << "Ditt nya saldo är: " << saldo << endl;
                }
            }
            if (val == 'r')
            {
                if (vinst % 2 != 0)
                {
                    cout << "Resultatet blev Rött: " << vinst << endl;
                    saldo = saldo + bet * 2 - bet;
                    cout << "Du vann: " << bet + bet << endl;
                    cout << "Ditt nya saldo är: " << saldo << endl;
                }
                else
                {
                    cout << "Du förlorade resultatet blev Svart: " << vinst << endl;
                    cout << "Du förlorade: " << endl;
                    saldo = saldo - bet;
                    cout << "Ditt nya saldo är: " << saldo << endl;
                }

            }

        }

        /*Här hamnar du om du valde "2" i det första steget efter du valt insats. Även i denna if-sats finns det 2 andra if-satser ,*/

        if (val == '2')
        {
            cout << "Vilket nummer?: ";

            cin >> val;

            if (vinst == val)
            {
                cout << "Grattis du vann: " << vinst << endl;
                cout << "Du vann: " << bet * 10 << endl;
                saldo = saldo + bet * 10 - bet;
                cout << "Ditt nya saldo är " << saldo << endl;
            }
            else if (vinst!=val)
            {
                saldo = saldo - bet;
                cout << "Fel nummer, det rätta nummret var: " << vinst << " - Ditt nya saldo är: " << saldo << endl;
            }
        }

        do
        {
            cout << "Vill du spela igen?: j/n?: " << endl;
            cin >> spelaigen;
        } while (spelaigen == 'j' || spelaigen == 'J');
    }
    return 0;
}
1 Answers

This code seems wrong to me (but apologies I don't read Swedish)

    do
    {
        cout << "Vill du spela igen?: j/n?: " << endl;
        cin >> spelaigen;
    } while (spelaigen == 'j' || spelaigen == 'J');

I think what you are doing is asking whether the user want to try again, yes or no? If that's right then all you need is an if statement which breaks out of the main loop if the answer is no.

    cout << "Vill du spela igen?: j/n?: " << endl;
    cin >> spelaigen;
    if (spelaigen == 'n' || spelaigen == 'N')
        break;

Now that code works but you could also check if the answer is yes or no and ask again if it is neither. That does require an extra loop and maybe that is what you were trying to do in your code. The correct code looks like this

    do
    {
        cout << "Vill du spela igen?: j/n?: " << endl;
        cin >> spelaigen;
    }
    while (spelaigen != 'j' && spelaigen != 'J' && spelaigen != 'n' && spelaigen != 'N');
    if (spelaigen == 'n' || spelaigen == 'N')
        break;
Related