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

Problem z instrukcją else if

Ostatnio zmodyfikowano 2017-10-26 11:09
Autor Wiadomość
sobol3k
Temat założony przez niniejszego użytkownika
Problem z instrukcją else if
» 2017-10-25 11:27:58
C/C++
clude < windows.h >
#include <ctime>
#include <cstdlib>
#include <time.h>
#include <conio.h>

using namespace std;

void menu( int & x )
{
    cout << "|||||| PROSTA GRA ||||||\n\n";
   
    cout << "1. Latwy (1-10)\n";
    cout << "2. Sredni (1-15)\n";
    cout << "3. Trudny (1-20)\n\n";
   
    cout << "Twoj wybor: ";
    cin >> x;
}

void gra( int a, int b, int c )
{
    while( a != b )
    {
        c++;
       
        if( a > b )
        {
            cout << "Twoja liczba jest zbyt duza. Ponow probe. Proba" << " " << c << endl;
            cout << "Ponowny strzal: ";
            cin >> a;
           
        }
        else if( a < b )
        {
            cout << "Twoja liczba jest zbyt mala. Ponow probe. Proba" << " " << c << endl;
            cout << "Ponowny strzal: ";
            cin >> a;
        }
        else
             cout << "Gratulacje! Poradziles sobie :)";
       
    }
}

int main()
{
    srand( time( NULL ) );
    int wybor_poziomu, proba = 0, losowa_liczba, twoja_liczba;
   
    menu( wybor_poziomu );
   
    switch( wybor_poziomu )
    {
    case 1:
        {
            system( "cls" );
           
            losowa_liczba = rand() % 10 + 1;
           
            cout << "|||||| TRYB LATWY ||||||\n\n";
            cout << "Twoim zadaniem jest odgadnac liczbe z przedzialu od 1 do 10. Masz tylko 3 proby." << endl;
            cout << "Twoj strzal:" << " ";
            cin >> twoja_liczba;
           
            gra( twoja_liczba, losowa_liczba, proba );
           
            break;
        }
    case 2:
        {
            system( "cls" );
           
            losowa_liczba = rand() % 15 + 1;
           
            cout << "|||||| TRYB SREDNI ||||||\n\n";
            cout << "Twoim zadaniem jest odgadnac liczbe z przedzialu od 1 do 15. Masz tylko 3 proby." << endl;
            cout << "Twoj strzal:" << " ";
            cin >> twoja_liczba;
           
            gra( twoja_liczba, losowa_liczba, proba );
           
            break;
        }
    case 3:
        {
            system( "cls" );
           
            losowa_liczba = rand() % 20 + 1;
           
            cout << "|||||| TRYB TRUDNY ||||||\n\n";
            cout << "Twoim zadaniem jest odgadnac liczbe z przedzialu od 1 do 20. Masz tylko 3 proby." << endl;
            cout << "Twoj strzal:" << " ";
            cin >> twoja_liczba;
           
            gra( twoja_liczba, losowa_liczba, proba );
           
            break;
        }
        default: cout << "Nie ma takiego wyboru! Ponow probe."; break;
    }
   
    return 0;
}

Mój problem polega na tym iż jeśli użytkownik zgadnie liczbe to program nie wyświetla mu zawartego komunikatu w instrukcji else if a dokładnie chodzi mi o komunikat: "Gratulacje! Poradziles sobie :)" tak jak by pomija to i nie wiem dlaczego tak się dzieje. Drugie pytanie to dlaczego zmienną wybor_poziomu musiałem przekazać przez referencje do funkcji menu() żeby by mi cała funkcja wyświetlająca menu dla gracza działała poprawnie bez podania operatora referencji, kiedy wybierałem poziom to zawsze mi przechodził program do poziomu łatwego nawet jeśli wybrałem średni lub trudny.
P-166076
YooSy
» 2017-10-25 11:43:01
tak jak by pomija to i nie wiem dlaczego tak się dzieje.
Bo pomija. Pobieranie danych od użytkownika masz w niewłaściwym miejscu (miejscach).
Po podaniu prawidłowej wartości, program opuszcza pętlę.

Masz powtarzający się kod (pozbądź się tego, źródła twojego problemu).
Pobieranie danych od użytkownika powinno być w jednym miejscu, a poniżej sprawdzenie danych.
P-166077
sobol3k
Temat założony przez niniejszego użytkownika
» 2017-10-26 11:09:18
Dziękuje za pomoc już sobie poradziłem :) Można zamknąć
P-166095
« 1 »
  Strona 1 z 1