• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Pętla i switch

Object Storage Arubacloud
0 głosów
544 wizyt
pytanie zadane 26 stycznia 2017 w C i C++ przez Śwież4k Bywalec (2,570 p.)

Chciałbym, aby w przypadku "default" program się powtórzył. Niestety pętla nie chce zadziałać.

#include <iostream>
#include <string>

using namespace std;

void graj ()
{
cout << "gra" << endl;
}
void wczytaj ()
{

}
void multiplayer ()
{

}
int main ()
{
    int wybor;
 while (wybor != "1" && wybor != "2" && wybor != "3" && wybor != "4")
        {

    cout << "1. Graj"<< endl;
    cout << "2. Wczytaj stan gry"<< endl;
    cout << "3. Tryb Multiplayer"<< endl;
    cout << "4. Koniec"<< endl;
    cout << "Wybierz: ";
    cin >> wybor;
    switch (wybor):

    {
    case 1:
        graj();
        break;
    case 2:
        wczytaj();
        break;
    case 3:
        multiplayer();
        break;
    case 4:
        cout << "Dziekuje za gre!"<< endl;
        break;
    default:
        cout << "Niepoprawny wybor."<< endl;
        break;


    }
}


}

 

2 odpowiedzi

+2 głosów
odpowiedź 26 stycznia 2017 przez niezalogowany
edycja 26 stycznia 2017
#include <iostream>
#include <string>

using namespace std;

void graj()
{
    cout << "gra" << endl;
}

void wczytaj()
{
    cout << "wczytaj" << endl;
}

void multiplayer()
{
    cout << "multiplayer" << endl;
}

int main ()
{
    int wybor;
    while(true)
    {

        cout << "1. Graj"<< endl;
        cout << "2. Wczytaj stan gry"<< endl;
        cout << "3. Tryb Multiplayer"<< endl;
        cout << "4. Koniec"<< endl;
        cout << "Wybierz: ";
        if(cin >> wybor)
        {
            switch (wybor)
            {
            case 1:
                graj();
                break;
            case 2:
                wczytaj();
                break;
            case 3:
                multiplayer();
                break;
            case 4:
                cout << "Dziekuje za gre!"<< endl;
                break;
            default:
                cout << "Niepoprawny wybor."<< endl;
                break;
            }
        }
        else cout<<"Podales litere :C"<<endl;
    }
}

Tak może być?

komentarz 26 stycznia 2017 przez Alex.Ironside Stary wyjadacz (14,900 p.)
"brak nawiasu klamrowego kończącego switch"

Możesz powiedzieć który? Jak tam widzę 3 otwarte i 3 zamknięte
komentarz 26 stycznia 2017 przez Śwież4k Bywalec (2,570 p.)
Dzięki ^^
komentarz 26 stycznia 2017 przez niezalogowany
Źle skopiowałem kod ;)
komentarz 26 stycznia 2017 przez niezalogowany
Śwież4k - troszkę zmieniłem kod, by spełniał to co chcesz osiągnąć.
komentarz 26 stycznia 2017 przez Śwież4k Bywalec (2,570 p.)

Zauważyłem, dzięki. Mógłbyś mi jeszcze wytłuamczyć czemu w pętli

while (wybor != "1" && wybor != "2" && wybor != "3" && wybor != "4")

Nie może być cudzysłowów, bo nie chcę popełniać tego ewentualnego błędu w przyszłości.

Napisałeś to uprzednio, ale przy edycji kodu najwyraźniej usunąłeś to wyjaśnienie

komentarz 26 stycznia 2017 przez niezalogowany

Zmienna wybór jest typem liczbowym. Liczby nie można przyrównać do ciągu znaków w C++ (czyli np "ala ma kota"). Czyli taki kod byłby dobrze tak:

while (wybor != 1 && wybor != 2 && wybor != 3 && wybor != 4)

Ewentualnie mógłbyś zmienić typ zmiennej wybór na string i by działało na poprzedniej zasadzie ;) 

komentarz 26 stycznia 2017 przez niezalogowany

To też można tłumaczyć kodem tak:

int liczba = 5; // po prostu liczba
string napis = "ala ma kota"; // napis musi miec swój początek i koniec
// definiują je cudzysłowia
char znak = 'a'; // znak nie musi mieć zaznaczone gdzie się kończy a 
// gdzie zaczyna, ale inaczej kompilator nie wiedziałby czy chodzi o // litere a czy o jakąś zmienną, która wcześniej została taka nazwana np

char a = 'd';
char znak = a; // byloby tak bez sensu :)

// no i analogicznie tutaj powinno być:
if(liczba == 5) // ...
if(napis == "5") // ...
if(znak == '5') // ...

 

+1 głos
odpowiedź 26 stycznia 2017 przez Molester Bywalec (2,920 p.)
#include <iostream>
#include <string>

using namespace std;

void graj()
{
    cout << "gra" << endl;
}
void wczytaj()
{

}
void multiplayer()
{

}


int main ()
{

    int wybor;

    cout << "1. Graj"<< endl;
    cout << "2. Wczytaj stan gry"<< endl;
    cout << "3. Tryb Multiplayer"<< endl;
    cout << "4. Koniec"<< endl;
    cout << "Wybierz: ";

    cin>> wybor;

    while (wybor!= 1 && wybor!=2 &&wybor!=3 &&wybor!=4)
    {
        cout << "Niepoprawny wybor" << endl;
        cin.clear();
        cin.sync();
        cin>>wybor;
    }

    switch (wybor)
    {
    case 1:
        graj();
        break;
    case 2:
        wczytaj();
        break;
    case 3:
        multiplayer();
        break;
    case 4:
        cout << "Dziekuje za gre!"<< endl;
        break;
    }
}

//Ja to zrobiłem tak, bez defaulta.

 

komentarz 26 stycznia 2017 przez Molester Bywalec (2,920 p.)
cin.clear() czyści flagi błędu, spowodowane przez wpisanie np tekstu zamiast liczby.

http://cpp0x.pl/kursy/Kurs-C++/Poziom-4/Wczytywanie-zawartosci-pliku-a-kontrola-bledow/485     (------ tutaj co nieco o flagach.

cin.sync() czyści bufor strumienia.

Tutaj trochę konkretniej wytłumaczone (z przykładami)

http://cpp0x.pl/kursy/Kurs-C++/Poziom-1/Obsluga-strumienia-wejsciowego/12
1
komentarz 26 stycznia 2017 przez Molester Bywalec (2,920 p.)
Swoją drogą co prawda w takim małym (jak na razie) programie może to wydać się niepotrzebne , ale bardzo zachęcam do nazywania zmiennych i funkcji po angielsku - to bardzo dobry nawyk i fajnie go pielęgnować.

Podobne pytania

0 głosów
1 odpowiedź 282 wizyt
pytanie zadane 3 kwietnia 2018 w C i C++ przez xLooks Początkujący (250 p.)
0 głosów
1 odpowiedź 684 wizyt
0 głosów
2 odpowiedzi 867 wizyt

92,760 zapytań

141,684 odpowiedzi

320,468 komentarzy

62,104 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...