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

Problem z funkcją i return- zawsze zwraca 1

Ostatnio zmodyfikowano 2013-07-28 18:03
Autor Wiadomość
kafus
Temat założony przez niniejszego użytkownika
Problem z funkcją i return- zawsze zwraca 1
» 2013-07-28 16:00:40
Witam,
Mam problem z pewną funkcją, która zawsze zwraca wartość 1 ! :(
Dokładnie chodzi mi o funkcje co_chcesz_zrobic. Nie wiem czemu, ale zawsze zwraca wartość 1, nawet przy wyborze 2.
I dodatkowo:
Gdy najpierw wybierze się opcje niedozwoloną, wyswietla stosowny komunikat(tu jest ok ), ale gdy później wybierze się opcje np.2 to wybor= 0, a i tak wykonywane jest jak przy wyborze opcje 1... wiem troche zakrecilem...
C/C++
int co_chcesz_zrobic()
{
    int wybor;
   
    cout << "I po grze:). Co chcesz zrobic?: " << endl;
    cout << "[1]- zagram jeszcze raz!" << endl;
    cout << "[2] - juz nie chce. Wychodze!" << endl;
    cin >> wybor;
   
    if( wybor != 1 && wybor != 2 )
    do
    {
        cin.clear();
        cin.sync();
        cout << "niestety nie ma takiego wyboru, sproboj jeszcze raz: ";
        cin >> wybor;
    } while( wybor != 1 && wybor != 2 );
   
    else
    {
        if( wybor = 1 )
             return 1;
       
        if( wybor = 2 )
             return 2;
       
    }
}
Dalszy ciąg programu:
C/C++
int main()
{
   
    srand( time( NULL ) );
    int wylosowana =( rand() % 1000 ) + 1;
    int liczba;
    int ruchy = 1;
   
    std::cout << "Wylosowana zostala liczba z przedzialu 1 do 1000." << endl;
    cout << "zgadnij jaka to liczba!" << endl;
    cout << wylosowana << endl;
    cin >> liczba;
   
    do
    {
       
        if( liczba < 1 || liczba > 1000 )
        {
            cout << "podales liczbe: " << liczba << endl;
            cout << "Jest to liczba z poza przedzialu 1-1000. Sproboj jeszcze raz" << endl;
            cin >> liczba;
        }
        else
        {
           
            if( liczba > wylosowana )
            {
                ruchy++;
                cout << "podales liczbe: " << liczba << endl;
                cout << "nietrafiles! musisz podac MNIEJSZA liczbe" << endl;
                cin >> liczba;
            }
           
           
            if( liczba < wylosowana )
            {
                ruchy++;
                cout << "podales liczbe: " << liczba << endl;
                cout << "nietrafiles! musisz podac WIEKSZA liczbe" << endl;
                cin >> liczba;
            }
           
        }
       
    } while( liczba != wylosowana );
   
   
    cout << "TRAFILES. Wygrales w: " << ruchy;
    cout << " ruchach. GRATULUJE" << endl << endl;
   
    int koniec = co_chcesz_zrobic();
   
    cout << "wybrales: " << koniec << endl;
   
    if( koniec = 1 )
         cout << main();
   
    if( koniec = 2 )
         cout << "papa";
   
    return 0;
}
P-88946
Berux
» 2013-07-28 16:14:01
C/C++
if( wybor = 1 )
Operator '=' to przypisanie, prawdopodobnie chodziło ci o porównanie - jeśli tak, jest to operator '=='.

Ten sam błąd masz w innym if'ie.

/edit:
cout << main();
Nie wiem, ale wydaje mi się, że jest to błędne - wytłumacz, dlaczego to użyłeś, to dopasujemy coś innego ;)


Pozdrawiam,
Berux
P-88947
luky92
» 2013-07-28 16:15:01
Jest
C/C++
else
{
    if( wybor = 1 )
         return 1;
   
    if( wybor = 2 )
         return 2;
   
}
}
ma być
C/C++
else
{
    if( wybor == 1 )
         return 1;
   
    if( wybor == 2 )
         return 2;
   
}
}
EDIT kolega był szybszy xD
P-88948
kafus
Temat założony przez niniejszego użytkownika
» 2013-07-28 16:19:31
Oj, no pewnie!!! przecież to takie proste :) dzieki za szybką odpowiedź.

 
cout << main();

Chodziło mi tutaj o to, aby od początku czytał int main.
Chodzi o to jak uzytkownik wybierze, że chce jeszcze raz zagrać to gra od początku, czyli od int main{...}

ps. jak wstawic kod na forum do ramki c++ ? :)
P-88949
pekfos
» 2013-07-28 17:18:35
P-88952
kafus
Temat założony przez niniejszego użytkownika
» 2013-07-28 17:40:33
Dziękuję. Tego szukałem i nie umiałem znaleźć.

Mam jeszcze jeden problem.
Chcę dodać do programu opcję ilości wykorzystanych i dostepnych ruchow (
int ruchy = 0;

Przyklad jak to zrobilem:
 
C/C++
if( liczba > wylosowana )
{
    ruchy++;
    cout << "podales liczbe: " << liczba << endl;
    cout << "nietrafiles! musisz podac MNIEJSZA liczbe" << endl;
    cout << "To byl twoj: " << ruchy << " ruch" << endl;
    cout << "Pozostalo: " << 10 - ruchy << " Ruchow" << endl;
    cin >> liczba;
}

wszystko ok, ale jak dochodzi do:

to byl twoj: 10 ruch
 Pozostalo: 0 ruchow
To jeszcze moge podac kolejna liczbe i dopiero wtedy dochodzi do :

C/C++
if( ruchy == 10 )

do {
    cout << endl << endl << endl << "Przekroczyles ilosc szans. " << "PRZEGRALES. Sproboj jeszcze raz" << endl;
    cout << "byla to liczba: " << wylosowana << endl << endl << endl << endl << endl;
    goto wybory;
} while( ruchy == 10 );


Oczywiscie jak podam nawet tą dobrą to i tak jest przegrana ( to akurat dobrze).
Ale nie chce, aby była możliwość podania kolejnej po 10 strzale.
P-88954
luky92
» 2013-07-28 17:48:58
C/C++
if( liczba > wylosowana )
{
    ruchy++;
    cout << "podales liczbe: " << liczba << endl;
    cout << "nietrafiles! musisz podac MNIEJSZA liczbe" << endl;
    cout << "To byl twoj: " << ruchy << " ruch" << endl;
    cout << "Pozostalo: " << 10 - ruchy << " Ruchow" << endl;
    if( ruchy != 10 ) {
        cin >> liczba;
    }
}
P-88956
pekfos
» 2013-07-28 18:03:01
Dziękuję. Tego szukałem i nie umiałem znaleźć.
Obok "Załóż nowy temat" jest link (w zielonej ramce).
P-88957
« 1 »
  Strona 1 z 1