Problem z wyswietlaniem informacji

0

Witam. Robie program, ktory losuje liczbe od 1 do 1000, a zadaniem uzytkownika jest odgadniecie tej liczby. Przy błędnym strzale program wyswietla wskazowki: "Sprobuj mniejsza liczbe", albo "Sprobuj wieksza liczbe". Gdy podam np. liczbe 999, wskazowka wyswietla sie poprawnie, ale gdy po tym wpisze niepoprawne dane, wtedy na ekranie wyswietla sie:
"Upewnij się, ze podałeś liczbę.
Spróbuj większą liczbę"
Co zrobić, żeby pod ostrzezeniem wyswietlala sie poprawna wskazowka. Ponadto jestem ciekaw co robie zle w kodzie, na co zwracac uwage itd.

#include <iostream>
#include <cstdlib>
#include <ctime>
int main()
{
    int i=0;
    int typ;
    bool bad;
    srand( time( NULL ) );
    int liczba = (std::rand() % 1000) + 1;
        std::cout << "Podaj liczbe od 1 do 1000: ";
    do{
        i++;
        std::cin >> typ;
        bad = std::cin.fail();
        std::cin.clear();
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        system("cls");
        if(bad){
            std::cout << "Upewnij sie, ze podales liczbe.\n";   
        }
        if(typ>liczba){
            std::cout << "Sprobuj mniejsza liczbe." << std::endl;
        }
        else if(typ<liczba){
            std::cout << "Sprobuj wieksza liczbe." << std::endl;
        }
    }while(liczba!=typ);
    
    system("cls");
    std::cout << "Zgadles za " << i << " razem." << std::endl;
    std::cout << "Poprawna odpowiedz to: " << liczba << std::endl;
    
    return 0;
}
2

Jeśli nie udało się wczytać typu, to po co jakiekolwiek ostrzeżenia? Powinieneś ponowić próbę pobrania liczby, bo na jakiej podstawie chcesz mówić że jest większa/mniejsza?

Przenieś pobieranie (do skutku) do osobnej funkcji.

1 użytkowników online, w tym zalogowanych: 0, gości: 1