Rozdział 16 Delikatnie rozszerzona praca domowa :)
Ostatnio zmodyfikowano 2017-02-19 21:40
shrvabl Temat założony przez niniejszego użytkownika |
Rozdział 16 Delikatnie rozszerzona praca domowa :) » 2017-02-09 00:48:26 Siemka, Zrobiłem grę z rozdziału 16 (http://cpp0x.pl/kursy/Kurs-C++/Poziom-2/Pseudolosowe-liczby-calkowite/290), tylko występuje u mnie problem jeśli się wpisze lterę bądź znak inny od liczby. Nie mam w ogóle pojęcia jak to naprawić. Formułę na razie robię w tym drugim kroku, więc zakładam, że użytkownik dobrze wprowadza pierwszą cyfrę. Po wpisaniu literki w drugiej części mam nieskończoną pętlę :C Będę wdzięczny za pomoc :) Tutaj wstawiam kod: #include <iostream> #include <cstdlib> #include <ctime>
using namespace std;
int main() { srand( time( NULL ) ); int liczba; int koncowa; cout << "------------------------------------" << endl; cout << "-----ZGADNIJ WYLOSOWANA LICZBE------" << endl; cout << "-------------------------- ---------" << endl; cout << endl; cout << "Chcesz losowac liczby od 0 do ...?" << endl; cin >> koncowa; liczba =( rand() % koncowa + 1 ); cout << "Wpisz liczbe wylosowana przez program" << endl; cout << " i zatwierdz przyciskiem 'ENTER'" << endl; cout << endl; cout << " ( Wylosowana liczba zawiera sie w ) " << endl; cout << " ( przedziale od 0 do " << koncowa << " )" << endl; cout << endl; int los; int proba = 0; cout << liczba << endl; do { bool oke; do { cout << "WPISZ SWOJ LOS." << endl; cin >> los; oke = cin.good(); cout << oke << endl; cin.clear(); if( oke == 0 ) { cout << "Ktos tu pomijal lekcje w przedszkolu, skoro nie odroznia cyfr od innych znakow." << endl; oke = 0; } } while( oke != 1 ); if( los < liczba ) cout << "Strzeliles za nisko! Wybierz WYZSZA liczbe!" << endl; else if( los > liczba ) cout << "Strzeliles/as zbyt wysoko! Wybierz NIZSZA liczbe!" << endl; proba++; cout << endl; } while( los != liczba ); cout << "Gratulacje! Zgadles/as za " << proba << "razem!" << endl; cout << "KONIEC" << endl; return 0; }
|
|
carlosmay |
» 2017-02-09 06:07:10 |
|
shrvabl Temat założony przez niniejszego użytkownika |
» 2017-02-10 00:12:36 Dzięki, w końcu się udało. Zwracam poprawiony kod. Są jeszcze jakieś uwagi co do kodu, będę wdzięczny za każdy feedback :) #include <iostream> #include <cstdlib> #include <ctime>
using namespace std;
int main() { srand( time( NULL ) ); int liczba; int koncowa; cout << "------------------------------------" << endl; cout << "-----ZGADNIJ WYLOSOWANA LICZBE------" << endl; cout << "-------------------------- ---------" << endl; cout << endl; bool oke0; do { cout << "Chcesz losowac liczby od 0 do ...?" << endl; cin >> koncowa; oke0 = cin; if( cin == 0 ) { cout << "Ktos tu pomijal lekcje w przedszkolu, skoro nie odroznia cyfr od innych znakow." << endl; cout << endl; cin.clear(); cin.sync(); } } while( oke0 != 1 ); liczba =( rand() % koncowa + 1 ); cout << "Wpisz liczbe wylosowana przez program" << endl; cout << " i zatwierdz przyciskiem 'ENTER'" << endl; cout << endl; cout << " ( Wylosowana liczba zawiera sie w ) " << endl; cout << " ( przedziale od 0 do " << koncowa << " )" << endl; cout << endl; int los; int proba = 0; do { bool oke; oke = 1; do { cout << "WPISZ SWOJ LOS." << endl; cin >> los; oke = cin; if( cin == 0 ) { cout << "Ktos tu pomijal lekcje w przedszkolu, skoro nie odroznia cyfr od innych znakow." << endl; cout << endl; cin.clear(); cin.sync(); } } while( oke != 1 ); if( los < liczba ) cout << "Strzeliles za nisko! Wybierz WYZSZA liczbe!" << endl; else if( los > liczba ) cout << "Strzeliles/as zbyt wysoko! Wybierz NIZSZA liczbe!" << endl; proba++; cout << endl; } while( los != liczba ); cout << "Gratulacje! Zgadles/as za " << proba << "razem!" << endl; cout << "KONIEC" << endl; return 0; }
|
|
carlosmay |
» 2017-02-10 06:55:44 Dla zmiennych logicznych używaj true i false . Są wymowniejsze. Od razu widać jaką mają rolę. |
|
shrvabl Temat założony przez niniejszego użytkownika |
» 2017-02-16 11:52:22 carlosmay, chodzi Ci o to, aby zamiast bool oke = 1 wstawić: bool oke = true ? |
|
Szymon2727 |
» 2017-02-16 18:01:33 Zamiast robić tak: Zastosuj samo true, nie ma sensu robić zmiennej bool tylko dlatego, by miała wartość prawdziwą, bo od tego jest true. Co innego gdyby ta prawda zmieniła się na fałsz w określonym przypadku. |
|
shrvabl Temat założony przez niniejszego użytkownika |
» 2017-02-17 00:08:41 Ale ona później może się zmieniać na fałsz, jeśli użytkownik wprowadzi zamiast cyfry literę |
|
Szymon2727 |
» 2017-02-17 13:08:03 Co to ma być? Skąd to wziąłeś? Przypisujesz wartość oke do operacji pobrania danych std::cin. Pierwszy raz coś takiego widzę, a po przekompilowaniu bool nawet jak będziesz miał zero to dzięki temu nadal będzie miał jeden. if( cin == 0 ) { cout << "Ktos tu pomijal lekcje w przedszkolu, skoro nie odroznia cyfr od innych znakow." << endl; cout << endl; cin.clear(); cin.sync(); }
Zbędny warunek, a wiesz dlaczego? Po podaniu liczby zero: Floating point exception(core dumped) Zapchałeś coś w procesorze bez zabawy nawet z wskaźnikami czy bibliotekami od memory xdd Z resztą drobna sugestia, jak już piszesz taki długi cout to zero też jest cyfrą. |
|
« 1 » 2 3 |