Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

wychodzenie do menu z pętli while, która jest w case

Ostatnio zmodyfikowano 2011-05-27 21:28
Autor Wiadomość
CTRL85
Temat założony przez niniejszego użytkownika
wychodzenie do menu z pętli while, która jest w case
» 2011-05-27 19:52:31
Mój problem, poega na tym, że robię grę "LOTTO" i mam tam funkcję "Własny zakład" (wybieramy ile typujemy, losujemy itp)
Ale są tam pewne ograniczenia, żeby nie było za prosto, więc gdy użytkownik wpisze złą wartość (np przy liczie liczb typowanych wpisze większą od liczby losowanych) chcę, żeby cofało do menu. podgląd:

C/C++
int liczby = 0, zakres = 0, ile_losowanych = 0;
cout << "Ile liczb chcesz typowac?" << endl;
cin >> liczby;
while( liczby < 1 || liczby > 80 )
{
    cout << "Za duzo lub za malo liczb chcesz typowac!" << endl;
    //powrot do menu                   
}
cout << "podaj zakres losowania (min o 10 wiekszy od ilosci typowanych)  1- ";
cin >> zakres;
while( zakres - liczby < 10 || zakres < 2 || zakres > 110 )
{
    cout << "zakres zbyt maly lub zbyt duzy!" << endl;
    //powrot
}
cout << "Ile liczb mam wylosowac?" << endl;
cin >> ile_losowanych;
while( ile_losowanych - zakres > 5 )
{
    cout << "liczba losowanych jest taki sam lub mniejszy od zakresu losowania" << endl;
    //powrot
}

Pętle while są, ponieważ wcześnie zamiast "//powrot" była możliwość jeszcze próby, ale tak można było się zapętlić :)

Chodzi, o to, że jeśli warunek nie jest spełniony - powrot do menu

EDIT:

Żeby była jasność: jeśli była by jedna pętla, to nie było by problemu, ale mam 3 i nie wiem :(
P-33546
malan
» 2011-05-27 20:05:23
Wrzuć to do funkcji.
P-33547
CTRL85
Temat założony przez niniejszego użytkownika
» 2011-05-27 20:34:36
całość?

Nie chcę wrócić do "Ile liczb chcesz typowac?" tylko do głównego menu.
P-33553
Mrowqa
» 2011-05-27 20:37:59
Widocznie mało wiesz o funkcjach :P Mógłbyś dać interesujące Ciebie argumenty, i wywołanie w pętelce ( chyba żebyś wolał powrót do menu - to jeszcze inaczej wywołać ). To da się tak zrobić, ale skoro masz za mało wiedzy to polecam albo się douczyć funkcji albo znaleźć inne rozwiązanie :P

EDIT:
nie zbyt rozumiem twojego problemu :P Chcesz powrót po prostu do menu ?? ( w funkcji starczyłoby zwykłe return :P - ale jeśli wrzuciłbyś to do funkcji ). Jest takie jedno niezbyt cieszące się wśród programistów rozwiązanie -
goto etykieta;
 :P Dla początkujących może się bardzo przydać - jednak używaj tego tylko w ostateczności kiedy nie ma innego rozwiązania :P ( czemu? w skrócie - kod staje się nieczytelny )
Opis goto:
C/C++
goto x; // przeskok do etykiety 'x'
// jakiś kodzik...
x: // <-- to jest etykieta, tu skoczy sterowanie

Pozdrawiam,
Mrowqa
P-33554
CTRL85
Temat założony przez niniejszego użytkownika
» 2011-05-27 20:47:08
Wiem, że można to zrobić używając "goto" ale staram się nie używać tego (do tej pory mi się udaje) i stąd ten temat.

Zrobię to z argumentami i jak bym miał jakieś problemy, to napiszę.
P-33555
Mrowqa
» 2011-05-27 20:49:49
I to się nazywa dobre podejście :P Czekam na wynik :D
Powodzenia
P-33556
CTRL85
Temat założony przez niniejszego użytkownika
» 2011-05-27 21:28:12
Znalazłem wydaje mi się, że łatwiejszy sposób:

bool powrot = false;
while (powrot != true)
{
//menu i reszta
int liczby = 0, zakres = 0, ile_losowanych = 0;
cout << "Ile liczb chcesz typowac?" << endl;
cin >> liczby;
if( liczby < 1 || liczby > 80 )
{
    cout << "Za duzo lub za malo liczb chcesz typowac!" << endl;
    _sleep(1000);
    cout << "powrot" << endl;
    break;               
}
cout << "podaj zakres losowania (min o 10 wiekszy od ilosci typowanych)  1- ";
cin >> zakres;
if( zakres - liczby < 10 || zakres < 2 || zakres > 110 )
{
    cout << "zakres zbyt maly lub zbyt duzy!" << endl;
    _sleep(1000);
    cout << "powrot" << endl;
    break;
}
cout << "Ile liczb mam wylosowac?" << endl;
cin >> ile_losowanych;
if( ile_losowanych - zakres > 5 )
{
    cout << "liczba losowanych jest taki sam lub mniejszy od zakresu losowania" << endl;
    _sleep(1000);
    cout << "powrot" << endl;
    break;
}

Myślę, że sposób równie dobry :)
P-33557
« 1 »
  Strona 1 z 1