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

Zadanie domowe, rozdział 16

Ostatnio zmodyfikowano 2014-06-05 17:13
Autor Wiadomość
Afterlook
Temat założony przez niniejszego użytkownika
Zadanie domowe, rozdział 16
» 2014-06-04 19:45:59
Napisałem ten program:
C/C++
#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ł:
C/C++
int zmienna;
while( !( cin >> zmienna ) ) //dopóki strumień jest w stanie błędu -> dopóki podawane są błędne dane
{
    //ew komunikat błędu
    cin.clear(); //kasowanie flagi błędu strumienia
    cin.sync(); //kasowanie zbędnych znaków z bufora
}
//tutaj na pewno wczytano poprawne dane do zmienna

Po jego wklejeniu musiałem wpisywać liczbę dwukrotnie...

@pekfos
C/C++
#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...
P-111428
pekfos
» 2014-06-04 20:27:11
Podaj kod.
P-111435
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:
C/C++
#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? :/
P-111481
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.
C/C++
std::cin >> liczba1;
while( !( std::cin >> liczba1 ) )
P-111483
« 1 »
  Strona 1 z 1