Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z maszyną losującą

Ostatnio zmodyfikowano 2012-11-06 21:31
Autor Wiadomość
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.

C/C++
#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!
P-68643
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 :)
C/C++
int wpisywana = sprawdzanie();
zamień na:
C/C++
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.
P-68651
akwes
» 2012-11-06 21:15:21
C/C++
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ń
C/C++
int wpisywana = sprawdzanie();

na

C/C++
wpisywana = sprawdzanie();
P-68654
DejaVu
» 2012-11-06 21:17:46
@up: hehe :P
P-68655
SimpleJan
Temat założony przez niniejszego użytkownika
» 2012-11-06 21:31:24
Działa, wielkie dzięki :)
P-68665
« 1 »
  Strona 1 z 1