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

Gra z rozdzialu 16. Problem

Ostatnio zmodyfikowano 2013-08-26 15:38
Autor Wiadomość
jasiekm
Temat założony przez niniejszego użytkownika
Gra z rozdzialu 16. Problem
» 2013-08-26 00:18:45
Witam, znowu to samo, pojawia mi sie ten problem od rozdzialu w ktorym zaczelismy uzywac do..while.
Po blednym podaniu liczby w przedziale 1-1000 nie dziala wogile cin.clear() i cin.sync().
Mam macbooka i naprade szukam pomocy w rozwiazaniu problemu.

C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main()
{
    int zgadywana_liczba;
    int liczba_strzalow;
    zgadywana_liczba =( rand() % 1000 ) + 1;
   
    cout << "Zgadnij liczbe! ";
    cin >> zgadywana_liczba;
   
    if( zgadywana_liczba >( rand() % 1000 ) + 1 )
         cout << "Liczba za duza, sproboj jeszcze raz! ";
   
    if( zgadywana_liczba <( rand() % 1000 ) + 1 )
         cout << "Liczba za mala, sproboj jeszcze raz! ";
   
    do
    {
        int zgadywana_liczba;
       
        cin.clear(); // nie dziala :(
        cin.sync(); // rowniez nie dziala :(
       
        zgadywana_liczba =( rand() % 1000 ) + 1;
       
        cout << "Zgadnij liczbe! ";
        cin >> zgadywana_liczba;
        liczba_strzalow++;
    } while( zgadywana_liczba !=( rand() % 1000 ) + 1 );
   
    if( zgadywana_liczba ==( rand() % 1000 ) + 1 )
         cout << "Wylosowana liczba: " << zgadywana_liczba << "Liczba strzalow: " << liczba_strzalow;
   
    return 0;
}
P-90892
kubek3898
» 2013-08-26 08:13:11
Strumień z tego co mi się wydaje powinienneś czyścić tuż po otrzymaniu danych od użytkownika. Do tego nie rozumiem po co tworzysz zmienną zgadywana_liczba, którą wykorzystujesz do pobrania danych z klawiatury. Według mnie powinno to wyglądać tak:

C/C++
int zgadywana, liczba;
zgadywana =( rand() % 1000 ) + 1;
do
{
    cin >> liczba;
    cin.clear();
    cin.sync();
   
    // Do zrobienia: warunki sprawdzajace
   
    // Warunek konca petli
} while( zgadywana != liczba );

// Poza petla
if( zgadywana == liczba )
{
    cout << "brawo";
}
P-90893
KubusiastyKuba
» 2013-08-26 08:21:37
Jeszcze dodaj
srand( time( NULL ) );
:P
P-90894
jasiekm
Temat założony przez niniejszego użytkownika
» 2013-08-26 15:16:58
Po co dodawac
srand( time( NULL ) );
 ??? To nie ma sensu. Ma byc program ktory losuje liczbe i my zgadujemy..zgadujemy az trafimy, jakbym dodal
srand( time( NULL ) );
 to za kazdym razem jakbym nie trafil, strzelal poraz kolejny bylaby inna liczba.
P-90940
oputyk
» 2013-08-26 15:21:13
C/C++
#include<iostream>
#include<cstdlib>
#include<ctime>
int main()
{
    srand( time( NULL ) );
    int a =( rand() % 1000 ) + 1;
    int liczba;
    int trafienia = 1;
    std::cout << "Losowanie" << std::endl;
    std::cout << "Losowanie przebieglo pomyslnie" << std::endl;
    do
    {
        std::cout << "Teraz prosze o wybranie liczby od 1 do 1000. Trafiasz - wygrywasz, proste. Powodzenia!!!" << std::cout;
        std::cin >> liczba;
        if( liczba > 1000 )
             std::cout << "Wybrales zla liczbe!!! Wybierz liczbe od 1 do 1000 - nie mniej, nie wiecej" << std::endl;
       
        if( liczba == a ) {
            std::cout << liczba << std::endl;
            std::cout << "Swietnie!!! Wygrales!!!" << std::endl;
            std::cout << "Trafiales tyle razy - " << trafienia << std::endl;
        }
        else {
            std::cout << "Niestety nie udalo ci sie trafic. Sprobuj ponownie." << std::endl;
        }
        trafienia++;
    } while( a != liczba );
   
    return 0;
}
Ja zrobiłem tak i mi działało.
P-90941
killjoy
» 2013-08-26 15:23:50
@jasiekm

Nie wiem czy wiesz, ale
rand()
 też za każdym wywołaniem zwraca Ci inną liczbę, problem w tym, że jeżeli nie ustawisz ziarna w
srand()
 to zawsze gdy uruchomisz program,
rand()
 zwraca te same losowe liczby.
P-90943
kubawal
» 2013-08-26 15:38:01
@oputyk, znowu. Dawaj kod w [cpp]...[/cpp], bo takiego kodu nikomu się nie będzie chciało czytać.
P-90947
« 1 »
  Strona 1 z 1