Problem z maszyną losującą
Ostatnio zmodyfikowano 2012-11-06 21:31
SimpleJan Temat założony przez niniejszego użytkownika |
Problem z maszyną losującą » 2012-11-06 20:59:41 Witam! Mam problem z tym kodem. #include <iostream> #include <ctime> #include <cstdlib> using namespace std;
int sprawdzanie() { int wpisywana; do { cin.clear(); cin.sync(); cin >> wpisywana; if( cin.fail() ) cout << "Wpisz LICZBE: "; } while( cin.fail() ); return wpisywana; }
int main() { srand( time( NULL ) ); cout << "====MASZYNA LOSUJACA===="; int wylosowana =(( rand() % 1001 ) + 0 ); int proby = 0; int wpisywana; cout << endl << endl << "Wylosowano liczbe w przedziale 1 - 1000" << endl; cout << "Zgaduj: "; do { proby++; int wpisywana = sprawdzanie(); if( wpisywana > wylosowana ) { cout << "Za duzo!" << endl << "Zgaduj: "; } if( wpisywana < wylosowana ) { cout << "Za malo!" << endl << "Zgaduj: "; } } while( wpisywana != wylosowana ); cout << "WYGLALES! WYGRALES! WYGRALES!" << endl; cout << "Liczba prob: " << proby << "."; }
Po zgadnięciu int wylosowana, pętla do ... while nadal się wykonuję. Najdziwniejsze jest że użyłem tej pętli w innym kodzie i wykonała się normalnie... Dzięki z góry za odpowiedzi. PS. Dziękuje autorowi Kursu C++ za wspaniały materiał do nauki! |
|
DejaVu |
» 2012-11-06 21:12:04 Łał :D Normalnie pod debuggerem muszę to sprawdzić bo na pierwszy rzut oka wygląda wszystko ok :P Interesujące :) /edit: i wszystko jasne :) int wpisywana = sprawdzanie();
zamień na: wpisywana = sprawdzanie();
Zmienna lokalna przestaje istnieć przy wyjściu z pętli do ... while, a masz zmienną poziom wyżej o takiej samej nazwie więc... w warunku zakończenia pętli porównujesz de-facto zmienną wylosowana ze zmienną wpisywana, której wartość jest przypadkowa. |
|
akwes |
» 2012-11-06 21:15:21 int wpisywana = sprawdzanie();
przecież ta zmienna w pętli while przesłania zmienną wiekszego zasięgu :) w warunku końca pętli bierze udział inna zmienna, która tak samo się nazywa :) A którą trochę wyżej nad pętlą deklarujesz :) // Pierwszy :P Czyli zmień int wpisywana = sprawdzanie();
na wpisywana = sprawdzanie();
|
|
DejaVu |
» 2012-11-06 21:17:46 @up: hehe :P |
|
SimpleJan Temat założony przez niniejszego użytkownika |
» 2012-11-06 21:31:24 Działa, wielkie dzięki :) |
|
« 1 » |