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

Lekcja 16 - liczby pseudolosowe, zadanie domowe

Ostatnio zmodyfikowano 2020-11-03 19:47
Autor Wiadomość
r.deer
Temat założony przez niniejszego użytkownika
Lekcja 16 - liczby pseudolosowe, zadanie domowe
» 2020-11-03 18:55:57
Miesiąc temu zaczęłam uczyć się programowania, więc jestem jeszcze bardzo początkująca. Od kilku godzin próbuję poprawić grę, która była zadaniem domowym w lekcji 16 - użytkownik ma aż do skutku zgadywać liczbę wylosowaną przez program. Gra ma być zabezpieczona przed wprowadzeniem nieprawidłowych wartości.
Losowanie przebiega ok, problem zaczyna się gdy wprowadzam dwa razy wartość literową zamiast liczby np. przy pierwszej próbie i przy trzeciej - program wpada w nieskończoną pętlę powtarzania "Moja liczba jest wieksza / mniejsza (zależnie od tego w którym miejscu ciągu wstawię literkę czy na początku np. a90, czy np. na końcu - 89g). Podaj inna liczbe"  Podobnie dzieje się gdy przy pierwszej próbie wstawię liczbę, a przy drugiej dopiero jakąś liczbę z literką w składzie, albo samą literkę. Nie potrafię dojść, co i dlaczego nie działa.
C/C++
#include <iostream>
#include <time.h>
#include <limits>

int main()
{
    std::cout << "Losowanie " << std::endl;
    std::cout << "Program wylosuje teraz liczbe z przedzialu 1 - 1000. " << std::endl;
    std::srand( time( NULL ) );
    int wytypowana_liczba;
    int wylosowana_liczba =( rand() % 999 ) + 1;
   
    std::cout << "Zgadnij wylosowana liczbe " << std::endl;
    std::cin >> wytypowana_liczba;
   
   
    while( std::cin.fail() || wytypowana_liczba > 1000 || wytypowana_liczba < 1 )
    {
        std::cin.clear();
        std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' );
        std::cout << "Wpisales wartosc spoza wytyczonego zakresu. ";
        std::cout << "Podaj inna liczbe: " << std::endl;
        std::cin >> wytypowana_liczba;
    }
   
   
    while( wylosowana_liczba != wytypowana_liczba )
    {
        if( wylosowana_liczba > wytypowana_liczba )
        {
            std::cout << "Moja liczba jest wieksza" << std::endl;
        }
        else if( wylosowana_liczba < wytypowana_liczba )
        {
            std::cout << "Moja liczba jest mniejsza" << std::endl;
        }
        std::cout << "Podaj inna liczbe: " << std::endl;
        std::cin >> wytypowana_liczba;
        if( wylosowana_liczba == wytypowana_liczba )
             std::cout << "Zgadles." << std::endl;
       
    }
   
    return 0;
}
P-177668
pekfos
» 2020-11-03 19:47:01
Wczytujesz liczbę od użytkownika w 3 różnych miejscach i w najważniejszym (ostatnim) miejscu nie ma obsługi błędów. Najlepiej mieć wczytywanie liczby w jednym miejscu. Możesz zrobić wczytywanie w do..while które będzie powtarzać wczytywanie do czasu otrzymania poprawnej liczby, potem drugie, zewnętrzne do..while będzie powtarzać wczytywanie do czasu otrzymania właściwej liczby.
P-177669
« 1 »
  Strona 1 z 1