Gra z rozdzialu 16. Problem
Ostatnio zmodyfikowano 2013-08-26 15:38
jasiekm Temat założony przez niniejszego użytkownika |
Gra z rozdzialu 16. Problem » 2013-08-26 00:18:45 Witam, znowu to samo, pojawia mi sie ten problem od rozdzialu w ktorym zaczelismy uzywac do..while. Po blednym podaniu liczby w przedziale 1-1000 nie dziala wogile cin.clear() i cin.sync(). Mam macbooka i naprade szukam pomocy w rozwiazaniu problemu. #include <iostream> #include <cstdlib> #include <ctime>
using namespace std;
int main() { int zgadywana_liczba; int liczba_strzalow; zgadywana_liczba =( rand() % 1000 ) + 1; cout << "Zgadnij liczbe! "; cin >> zgadywana_liczba; if( zgadywana_liczba >( rand() % 1000 ) + 1 ) cout << "Liczba za duza, sproboj jeszcze raz! "; if( zgadywana_liczba <( rand() % 1000 ) + 1 ) cout << "Liczba za mala, sproboj jeszcze raz! "; do { int zgadywana_liczba; cin.clear(); cin.sync(); zgadywana_liczba =( rand() % 1000 ) + 1; cout << "Zgadnij liczbe! "; cin >> zgadywana_liczba; liczba_strzalow++; } while( zgadywana_liczba !=( rand() % 1000 ) + 1 ); if( zgadywana_liczba ==( rand() % 1000 ) + 1 ) cout << "Wylosowana liczba: " << zgadywana_liczba << "Liczba strzalow: " << liczba_strzalow; return 0; }
|
|
kubek3898 |
» 2013-08-26 08:13:11 Strumień z tego co mi się wydaje powinienneś czyścić tuż po otrzymaniu danych od użytkownika. Do tego nie rozumiem po co tworzysz zmienną zgadywana_liczba, którą wykorzystujesz do pobrania danych z klawiatury. Według mnie powinno to wyglądać tak: int zgadywana, liczba; zgadywana =( rand() % 1000 ) + 1; do { cin >> liczba; cin.clear(); cin.sync(); } while( zgadywana != liczba );
if( zgadywana == liczba ) { cout << "brawo"; } |
|
KubusiastyKuba |
» 2013-08-26 08:21:37 Jeszcze dodaj srand( time( NULL ) ); :P |
|
jasiekm Temat założony przez niniejszego użytkownika |
» 2013-08-26 15:16:58 Po co dodawac srand( time( NULL ) ); ??? To nie ma sensu. Ma byc program ktory losuje liczbe i my zgadujemy..zgadujemy az trafimy, jakbym dodal srand( time( NULL ) ); to za kazdym razem jakbym nie trafil, strzelal poraz kolejny bylaby inna liczba. |
|
oputyk |
» 2013-08-26 15:21:13 #include<iostream> #include<cstdlib> #include<ctime> int main() { srand( time( NULL ) ); int a =( rand() % 1000 ) + 1; int liczba; int trafienia = 1; std::cout << "Losowanie" << std::endl; std::cout << "Losowanie przebieglo pomyslnie" << std::endl; do { std::cout << "Teraz prosze o wybranie liczby od 1 do 1000. Trafiasz - wygrywasz, proste. Powodzenia!!!" << std::cout; std::cin >> liczba; if( liczba > 1000 ) std::cout << "Wybrales zla liczbe!!! Wybierz liczbe od 1 do 1000 - nie mniej, nie wiecej" << std::endl; if( liczba == a ) { std::cout << liczba << std::endl; std::cout << "Swietnie!!! Wygrales!!!" << std::endl; std::cout << "Trafiales tyle razy - " << trafienia << std::endl; } else { std::cout << "Niestety nie udalo ci sie trafic. Sprobuj ponownie." << std::endl; } trafienia++; } while( a != liczba ); return 0; } Ja zrobiłem tak i mi działało. |
|
killjoy |
» 2013-08-26 15:23:50 @jasiekm Nie wiem czy wiesz, ale rand() też za każdym wywołaniem zwraca Ci inną liczbę, problem w tym, że jeżeli nie ustawisz ziarna w srand() to zawsze gdy uruchomisz program, rand() zwraca te same losowe liczby. |
|
kubawal |
» 2013-08-26 15:38:01 @oputyk, znowu. Dawaj kod w [cpp]...[/cpp], bo takiego kodu nikomu się nie będzie chciało czytać.
|
|
« 1 » |