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

[Kurs c++]Pseudolosowe liczby całkowite. Problem z zadaniem domowym.

Ostatnio zmodyfikowano 2016-05-31 14:49
Autor Wiadomość
Lord1
Temat założony przez niniejszego użytkownika
[Kurs c++]Pseudolosowe liczby całkowite. Problem z zadaniem domowym.
» 2016-05-30 15:42:05
Cześć! Mam problem z zadaniem domowym,gdyć wyskakuje mi błąd.
Oto mój kod:
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;


int main()
{
    bool x;
    srand( time( NULL ) );
    int proby = 0, odp = 0, liczba =( rand() % 1000 ) + 1;
    while( odp == liczba )
    {
        cout << "Wylosowalem liczbe od 1 do 1000. Zgadnij ja ";
        cin >> odp;
        x = cin.good();
        if( x == 0 )
        {
            cout << "Podaj prawidłową odpowiedz";
        }
        else
        if( odp < liczba )
        {
            cout << "To jest wieksza liczba" << endl;
            proby++;
           
        }
        else
        {
            cout << "To jest mniejsza liczba" << endl;
            proby++;
        }
    }
    return 0;
}
Proszę o pomoc w sprawdzeniu czy int jest prawidlowy.
Pozdrawiam.

P-148730
carlosmay
» 2016-05-30 16:50:05
C/C++
while( odp != liczba )
 - zły warunek. Nieodpowiedni operator.

C/C++
if( odp < liczba )
 - tutaj też. Podaje odwrotnie podpowiedzi.

Do losowani są lepsze narzędzia. np: <random>
Zerknij.
P-148731
Lord1
Temat założony przez niniejszego użytkownika
» 2016-05-30 20:35:27
Dziękuję za pomoc, ale gdy zrobiłem to co mi poleciłeś to kod działał, ale gdy wpisuję w mijsce podania liczby literę (np. 'A') to program zamiast wyświetlić komunikatu "Podaj prawidłową odpowiedz" i wrócić do podawania liczby to ciągle wyświetla ten komunikat i nie da się nic wpisać.
Teraz kod wygląda tak:
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;


int main()
{
    bool x;
    srand( time( NULL ) );
    int proby = 0, odp = 0, liczba =( rand() % 1000 ) + 1;
    while( odp != liczba )
    {
        cout << "Wylosowalem liczbe od 1 do 1000. Zgadnij ja ";
        cin >> odp;
        x = cin.good();
        if( x == 0 )
        {
            cout << "Podaj prawidłową odpowiedz";
        }
        else
        if( odp < liczba )
        {
            cout << "To jest wieksza liczba" << endl;
            proby++;
           
        }
        else
        {
            cout << "To jest mniejsza liczba" << endl;
            proby++;
        }
    }
    return 0;
}
Treść polecenia:
Twoim zadaniem domowym jest napisanie prostej gry, która ma działać następująco:
1. Program losuje liczbę z przedziału od 1 do 1000.
2. Użytkownik zgaduje liczbę, która została wylosowana.
3. Jeżeli podana liczba jest za duża (za mała) gra wypisuje stosowny komunikat i powraca do kroku 2.
4. Jeżeli gracz trafi liczbę wylosowaną to progam kończy działanie, wypisując na ekran wylosowaną liczbę oraz liczbę 'strzałów', które oddał gracz.
Gra ma być zabezpieczona przed możliwością wprowadzenia błędnych wartości liczbowych.(to mi nie działa poprawnie)
P-148739
pekfos
» 2016-05-30 23:41:38
P-148761
Lord1
Temat założony przez niniejszego użytkownika
» 2016-05-31 14:05:37
Przeczytałem cały ten rozdział kilka razy i nie widzę tam rozwiązania mojego problemu.
P-148765
carlosmay
» 2016-05-31 14:38:12
Przeczytałem cały ten rozdział kilka razy i nie widzę tam rozwiązania mojego problemu.
No to słabo.

Użyj metod clear() oraz ignore().
Błąd wczytywania można wykrywać w warunku, np:
C/C++
while( !( std::cin >> zmienna ) )
{
    // czyszczenie bufora strumienia z błędnych danych
}

if( std::cin >> zmienna ) // jeśli wczytano
// zrób coś
else
// zrób coś innego, gdy nie uda się wczytać
P-148766
Lord1
Temat założony przez niniejszego użytkownika
» 2016-05-31 14:49:07
Ok. Dzięki za pomoc. Wszystko działa. Skapnąłem sięoco chodzi dopiero po przeczytaniu innego tematu na forum. Zapomniałem wyczyścić bufor  :(.
Zamykam temat.
P-148767
« 1 »
  Strona 1 z 1