[Lekcja 16] Zadanie domowe; Gra działa, ale nie do końca dobrze....
Ostatnio zmodyfikowano 2012-03-07 21:30
mzmzmz Temat założony przez niniejszego użytkownika |
[Lekcja 16] Zadanie domowe; Gra działa, ale nie do końca dobrze.... » 2012-03-07 16:10:08 Witam. Z reguły sam próbuję rozwiązywać problemy, aż do skutku ale tutaj skończyły mi się już pomysły. Siedzę nad tym już parę godzin i już mam mętlik w głowie dlatego proszę o jakąś podpowiedź, wyjaśnienie źródła problemu albo rozwiązanie na tacy :). * Przeglądałem inne tematy dotyczące lekcji 16 (i 15 też) - nie natrafiłem na informacje pomocne w rozwiązaniu tego problemu. Napisany przeze mnie program działa w zasadzie zgodnie z założeniami zadania domowego z lekcji 16, ale w przypadku wpisania błędnej wartości (nie liczby) wykonuje on całą resztę kodu znajdującą się poza pętlą [do... while (...)] sprawdzającą poprawność wprowadzenia zmiennej "strzał". Wydaje mi się, że jak umieściłem pętlę wewnątrz to dopiero po tym jak warunek kończący zwróci wartość false, powinna zostać zrealizowana reszta kodu..(+1 do ilości prób i porównanie wartości) To już tak po prostu jest w c++, ja coś źle zrobiłem/nie rozumiem, czy jak się z tym uporać dowiem się z dalszej części kursu ??? Poniżej zamieszczam kod źródłowy: #include <iostream> #include <cstdlib> #include <ctime>
using namespace std;
int main() { int liczba; int strzal; int liczbaprob; srand( time( NULL ) ); liczba =(( rand() % 100 ) + 1 ); liczbaprob = 0; cout << "Zostala wylosowana liczba z przedzialu od 1 do 100. \nZgadnij jaka..." << endl << endl; do { do { cout << "Strzal: "; cin >> strzal; if( cin.fail() ) cout << "Blad. Sproboj jeszcze raz." << endl; cin.clear(); cin.sync(); } while( !cin.good() ); liczbaprob++; bool porownanie =( strzal != liczba ); switch( porownanie ) { case 1: if( strzal > liczba ) cout << "Za duzo" << endl << endl; else cout << "Za malo" << endl << endl; break; case 0: system( "cls" ); cout << "Liczba: " << liczba << endl; cout << "Liczba strzalow: " << liczbaprob << endl; break; } } while( !( strzal == liczba ) ); system( "pause" ); return 0; }
Byłbym bardzo wdzięczny za rozwianie moich wątpliwości bo nie wiem czy mam to tak zostawić i przejść do następnych części kursu, czy głowić się nad tym do skutku? Pozdrawiam |
|
jsc |
» 2012-03-07 17:59:45 Kodem: chyba naprawiasz strumień. |
|
pekfos |
» 2012-03-07 18:15:31 cin.clear(); cin.sync(); } while( !cin.good() ); :P //Ujednoznacznienie: źle. W warunku flagi czyszczone przed sprawdzeniem? |
|
jsc |
» 2012-03-07 18:20:02 |
|
mzmzmz Temat założony przez niniejszego użytkownika |
» 2012-03-07 21:26:37 Dzięki.
Przeniosłem czyszczenie flagi i bufora na początek pętli sprawdzającej i pomogło. Nadal wydaje mi się nielogicznym czyszczenie jeszcze przed wprowadzeniem, ale uczę się programować od niedawna i muszę jeszcze przestawić sposób myślenia. |
|
SeaMonster131 |
» 2012-03-07 21:30:25 1. Czyścisz strumień 2. Wprowadzasz dane 3. Sprawdzasz czy dane są poprawne (jeżeli liczba to liczba itd) 4. Jeżeli tak, to kończysz pętle, jeżeli nie, to wracasz do pkt 1. |
|
« 1 » |