lukhol Temat założony przez niniejszego użytkownika |
funkcja rand » 2014-04-17 18:43:13 siema, mam problem z funkcją rand ponieważ nie losuje mi różnych liczb tylko zawsze tą samą mimo tego, ze w kodzie jest srand ( time(NULL));. Uzywam funkcji w grze kamień,papier, nożyce, której kod wrzucam. #include <iostream> #include <cstdio> #include <math.h> #include<windows.h> #include <ctime> #include <string> #include <cstdlib>
using namespace std;
int costam() { int liczba, komputer, ja, x; string pytanie; komputer = 0; ja = 0; do { system( "cls" ); cout << "\n\t Wynik to: " << ja << ":" << komputer << endl << endl; cout << "Wpisz : 0-papier, 1-nozyce, 2-kamien czy -1-koniec programu" << endl; cout << "Wybierasz: "; cin >> liczba; if( liczba < 3 && liczba >- 1 ) { if( x = 0 ) { cout << "Ja wybralem papier! a Ty wybrales "; { if( liczba == 0 ) cout << "papier" << endl; else if( liczba == 1 ) cout << "nozyce" << endl; else if( liczba == 2 ) cout << "kamien" << endl; } if( liczba == 0 ) { cout << "Remis!" << endl; cout << ja << ":" << komputer << endl; cout << "Grasz dalej?(tak/nie)" << endl; } else if( liczba == 1 ) { cout << "Wygrales" << endl; ja = ja + 1; cout << ja << ":" << komputer << endl; cout << "Grasz dalej?(tak/nie)" << endl; } else if( liczba == 2 ) { cout << "Przegrales" << endl; komputer = komputer + 1; cout << ja << ":" << komputer << endl; cout << "Grasz dalej? (tak/nie)" << endl; } { do { cin >> pytanie; if( pytanie == "tak" ) break; else if( pytanie == "nie" ) { cout << "No to koniec :)"; Sleep( 1000 ); exit( 0 ); } else cout << "Wpisales bledna wartosc. Wpisz ja ponownie: "; } while( pytanie != "tak" || pytanie != "nie" ); } } else if( x = 1 ) { cout << "Ja wybralem nozyce! a Ty wybrales "; { if( liczba == 0 ) cout << "papier" << endl; else if( liczba == 1 ) cout << "nozyce" << endl; else if( liczba == 2 ) cout << "kamien" << endl; } if( liczba == 0 ) { cout << "Przegrales" << endl; komputer = komputer + 1; cout << ja << ":" << komputer << endl; cout << "Grasz dalej?(tak/nie)" << endl; } else if( liczba == 1 ) { cout << "Remis" << endl; cout << ja << ":" << komputer << endl; cout << "Grasz dalej?(tak/nie)" << endl; } else if( liczba == 2 ) { cout << "Wygrales" << endl; ja = ja + 1; cout << ja << ":" << komputer << endl; cout << "Grasz dalej?(tak/nie)" << endl; } { do { cin >> pytanie; if( pytanie == "tak" ) break; else if( pytanie == "nie" ) { cout << "No to koniec :)"; Sleep( 1000 ); exit( 0 ); } else cout << "Wpisales bledna wartosc. Wpisz ja ponownie: "; } while( pytanie != "tak" || pytanie != "nie" ); } } else if( x = 2 ) { cout << "Ja wybralem kamień! a Ty wybrales "; { if( liczba == 0 ) cout << "papier" << endl; else if( liczba == 1 ) cout << "nozyce" << endl; else if( liczba == 2 ) cout << "kamien" << endl; } if( liczba == 0 ) { cout << "Wygrlaes" << endl; ja = ja + 1; cout << ja << ":" << komputer << endl; cout << "Grasz dalej?(tak/nie)" << endl; } else if( liczba == 1 ) { cout << "Przegrales" << endl; komputer = komputer + 1; cout << ja << ":" << komputer << endl; cout << "Grasz dalej?(tak/nie)" << endl; } else if( liczba == 2 ) { cout << "Remis" << endl; cout << ja << ":" << komputer << endl; cout << "Grasz dalej?(tak/nie)" << endl; } { do { cin >> pytanie; if( pytanie == "tak" ) break; else if( pytanie == "nie" ) { cout << "No to koniec :)"; Sleep( 1000 ); exit( 0 ); } else cout << "Wpisales bledna wartosc. Wpisz ja ponownie: "; } while( pytanie != "tak" || pytanie != "nie" ); } } } else if( liczba >= 3 || liczba <- 1 ) { cout << "Liczba nie jest z przedzialu. Wpisz liczbe ponownie za 1[s]"; Sleep( 1000 ); } else if( liczba =- 1 ) { cout << "KONIEC!"; Sleep( 1000 ); exit( 0 ); } } while( liczba == 1 || liczba == 0 || liczba == 2 ); }
int main() { int liczba, x; srand( time( NULL ) ); x = rand() % 3; string pytanie; cout << endl << endl << endl << "\n\n\n\t\tWitaj w grze kamien, papier, nozyce !"; Sleep( 2000 ); do { costam(); } while( liczba == 1 || liczba == 0 || liczba == 2 ); return( 0 ); }
|
|
Monika90 |
» 2014-04-17 18:48:36 w C+++ operator porównania to ==, a nie =. Poza tym, zmienne x i liczba w main, to nie są te same zmienne, co w funkcji costam. |
|
lukhol Temat założony przez niniejszego użytkownika |
» 2014-04-17 18:52:17 @Monika90 Nawet jeżeli ==, a nie = to i tak nie rozwiąże mojego problemu ;p Tak zmienne nie są te same, ale nawet jeżeli wpisuje x=rand()%3 wewnątrz funkcji to i tak ciągle losuje mi tą samą liczbę. |
|
michal11 |
» 2014-04-17 18:56:58 Nie wiem, czy wiesz ale w main() masz praktycznie pętle nieskończoną. |
|
RazzorFlame |
» 2014-04-17 18:57:54 Na samym poczatku programu umiesc: srand(time(NULL)); Nie wywoluj tego pare razy. Zawsze tylko RAZ! |
|
lukhol Temat założony przez niniejszego użytkownika |
» 2014-04-17 18:59:23 srand(time(NULL)) przeciez jest wywołane tylko raz, a mimo to i tak nie działa. Co do pętli nie skończonej będę się o to martwił dopiero potem, szczególnie, ze nie mam w planach wpisywania w funkcji main dalszej częsci programu. |
|
Monika90 |
» 2014-04-17 19:10:34 nawet jeżeli wpisuje x=rand()%3 wewnątrz funkcji to i tak ciągle losuje mi tą samą liczbę. |
Na jakiej podstawie wyciągasz taki wniosek? |
|
lukhol Temat założony przez niniejszego użytkownika |
» 2014-04-17 19:28:40 Zapewne na takiej podstawie, ze próbowałem ją wpisać już w każdym możliwym miejscu wewnątrz funkcji costam. |
|
« 1 » 2 |