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

Rozdział 16. Błędny komunikat po dwukrotnym wpisaniu nieprawidłowej treści

Ostatnio zmodyfikowano 2018-09-09 17:32
Autor Wiadomość
cyrkiel
Temat założony przez niniejszego użytkownika
Rozdział 16. Błędny komunikat po dwukrotnym wpisaniu nieprawidłowej treści
» 2018-09-08 21:58:43
W następującym programie:
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <limits>

int main()
{
    srand( time( NULL ) );
    int strzal, proby = 0;
    int liczba =( std::rand() % 1000 ) + 1;
    std::cout << "Gra wylosuje teraz pewna liczbe z przedzialu od 1 do 1000. Twoim zadaniem jest ja odgadnac. \n";
    std::cout << liczba << std::endl;
    do
    {
        std::cout << "Podaj swoja liczbe: ";
        std::cin >> strzal;
        if( std::cin.fail() )
        {
            std::cin.clear();
            std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' );
            std::cout << "To nie jest prawidlowa liczba.\nPodaj swoja liczbe: ";
            std::cin >> strzal;
            proby++;
        }
        if( strzal < 1 || strzal > 1000 )
        {
            std::cin.clear();
            std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' );
            std::cout << "Liczba nie miesci sie w podanym zakresie.\n";
        }
        if( strzal != liczba && !( std::cin.fail() ) && !( strzal < 1 ) && !( strzal > 1000 ) )
        {
            std::cout << "Nie trafiles, sprobuj jeszcze raz.\n";
        }
        proby++;
    } while( strzal != liczba );
   
    std::cout << "Gratulacje! Trafiles na wylosowana liczbe - " << liczba << ".\nPotrzebowales do tego " << proby << " prob.\n";
    return 0;
}

jeśli wprowadzimy coś innego niż liczbę, program pokazuje prawidłowy komunikat (To nie jest prawidlowa liczba.), jednak jeśli przy kolejnym podaniu liczby znów wprowadzimy coś innego niż liczbę, program wyświetli nam komunikat (Liczba nie miesci sie w podanym zakresie.). Przy trzeciej takiej operacji z rzędu komunikat znów jest prawidłowy. Jak to naprawić?

Wyświetlenie liczby na samym początku programu jest oczywiście tylko pomocnicze, do sprawdzania.
P-172278
pekfos
» 2018-09-08 22:14:50
Za drugim razem nie sprawdzasz błędów.
P-172279
cyrkiel
Temat założony przez niniejszego użytkownika
» 2018-09-09 15:54:16
Ale dlaczego w takim razie odpala się if odpowiedzialny za liczby spoza zakresu, skoro to, co wpisuję, nie jest liczbą? I dlaczego w analogicznej sytuacji (liczbie spoza zakresu) zawsze pokazuje się prawidłowy komunikat?
P-172280
mateczek
» 2018-09-09 17:32:33
Ale dlaczego w takim razie odpala się if odpowiedzialny za liczby spoza zakresu, skoro to, co wpisuję, nie jest liczbą?
Bo zabezpieczenie na wypadek danej, która nie jest liczbą, zwyczajnie nie działa i program idzie dalej a powinien być albo przerwany albo zawrócony!!! w zależności co tam chcesz osiągnąć
P-172281
« 1 »
  Strona 1 z 1