Zadanie domowe, rozdział 16
Ostatnio zmodyfikowano 2014-06-05 17:13
Afterlook Temat założony przez niniejszego użytkownika |
Zadanie domowe, rozdział 16 » 2014-06-04 19:45:59 Napisałem ten program: #include <iostream> #include <cstdlib> #include <ctime> int main() { srand( time( NULL ) ); int liczba, liczba1, licznik = 0, strzaly = 0; liczba = std::rand() % 1000; do { std::cout << "Zgadnij liczbe z przdzialu od 0 do 1000: "; std::cin >> liczba1; if( liczba < liczba1 && liczba1 < 1000 && liczba1 > 0 ) { std::cout << "Szukana liczba jest mniejsza" << std::endl; strzaly++; } if( liczba > liczba1 && liczba1 < 1000 && liczba1 > 0 ) { std::cout << "Szukana liczba jest wieksza" << std::endl; strzaly++; } if( liczba == liczba1 && liczba1 < 1000 && liczba1 > 0 ) { licznik++; strzaly++; std::cout << "Brawo, zgadles!" << std::endl << "Szukana liczba to: " << liczba << std::endl << "Liczba strzalow: " << strzaly; } else std::cout << "Zly przedzial liczbowy" << std::endl; } while( licznik != 1 ); return 0; }
Pewnie da się go jeszcze skrócić, ale mniejsza z tym. Siedzę już około godziny nad jednym problemem i nie mogę sobie z tym poradzić, otóż chciałbym jeszcze ulepszyć ten program o to, żeby wywalał błąd kiedy wypisuje coś innego niż liczba i kontynuował działanie. Znalazłem fragment kodu, który "prawie" działał: int zmienna; while( !( cin >> zmienna ) ) { cin.clear(); cin.sync(); }
Po jego wklejeniu musiałem wpisywać liczbę dwukrotnie... @pekfos #include <iostream> #include <cstdlib> #include <ctime> int main() { srand( time( NULL ) ); int liczba, liczba1, licznik = 0, strzaly = 0; liczba = std::rand() % 1000; do { std::cout << "Zgadnij liczbe z przdzialu od 0 do 1000: "; std::cin >> liczba1; while( !( std::cin >> liczba1 ) ) { std::cout << "Blad. Podaj liczbe: "; std::cin.clear(); std::cin.sync(); } if( liczba < liczba1 && liczba1 < 1000 && liczba1 > 0 ) { std::cout << "Szukana liczba jest mniejsza" << std::endl; strzaly++; } if( liczba > liczba1 && liczba1 < 1000 && liczba1 > 0 ) { std::cout << "Szukana liczba jest wieksza" << std::endl; strzaly++; } if( liczba == liczba1 && liczba1 < 1000 && liczba1 > 0 ) { licznik++; strzaly++; std::cout << "Brawo, zgadles!" << std::endl << "Szukana liczba to: " << liczba << std::endl << "Liczba strzalow: " << strzaly; } if( liczba1 > 1000 || liczba1 < 0 ) std::cout << "Zly przedial liczbowy" << std::endl; } while( licznik != 1 ); return 0; }
Podaje np. literkę a, wyskakuje błąd i podaje liczbę. Następnie znowu zaczyna się pętla (jeśli nie zgadłem). No i tutaj jest problem, bo nic się nie wyświetla i muszę podać liczbę jeszcze raz i później jest tak za każdym razem. Próbowałem to przeanalizować, ale nic mi nie przychodzi do głowy... |
|
pekfos |
» 2014-06-04 20:27:11 Podaj kod. |
|
Afterlook Temat założony przez niniejszego użytkownika |
Znalazłem rozwiązanie » 2014-06-05 16:49:45 Dobra, chwile poszperałem na forum i znalazłem działające rozwiązanie: #include <iostream> #include <cstdlib> #include <ctime> int main() { srand( time( NULL ) ); int liczba, liczba1, licznik = 0, strzaly = 0; liczba = std::rand() % 1000; do { std::cout << "Zgadnij liczbe z przdzialu od 0 do 1000: "; std::cin >> liczba1; if( std::cin.fail() ) { do { std::cin.clear(); std::cin.sync(); std::cout << "Blad, nie zostala podana liczba: " << std::endl << "Zgadnij liczbe z przdzialu od 0 do 1000: "; std::cin >> liczba1; } while( std::cin.fail() ); } if( liczba < liczba1 && liczba1 < 1000 && liczba1 > 0 ) { std::cout << "Szukana liczba jest mniejsza" << std::endl; strzaly++; } if( liczba > liczba1 && liczba1 < 1000 && liczba1 > 0 ) { std::cout << "Szukana liczba jest wieksza" << std::endl; strzaly++; } if( liczba == liczba1 && liczba1 < 1000 && liczba1 > 0 ) { licznik++; strzaly++; std::cout << "Brawo, zgadles!" << std::endl << "Szukana liczba to: " << liczba << std::endl << "Liczba strzalow: " << strzaly; } if( liczba1 > 1000 || liczba1 < 0 ) std::cout << "Zly przedial liczbowy" << std::endl; } while( licznik != 1 ); return 0; }
Tylko teraz chciałbym się dowiedzieć dlaczego tamten kod nie działał tak jak trzeba? :/ |
|
pekfos |
» 2014-06-05 17:13:41 Tylko teraz chciałbym się dowiedzieć dlaczego tamten kod nie działał tak jak trzeba? :/ |
Widać i z wklejeniem gotowca mogą być problemy. std::cin >> liczba1; while( !( std::cin >> liczba1 ) )
|
|
|
« 1 » |