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

Problem z zadaniem z poziomu drugiego

Ostatnio zmodyfikowano 2011-11-21 14:56
Autor Wiadomość
Sebek2011
Temat założony przez niniejszego użytkownika
Problem z zadaniem z poziomu drugiego
» 2011-11-21 12:45:51
Witam serdecznie, mam problem z następującym zadaniem:

Zadanie domowe
 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.

Generalnie wszystko zrobiłem jak trzeba, ale przy zabezpieczaniu wpisywania błędnych wartości, fragment kodu:
C/C++
rand_number = rand() % 10 + 1;

std::cout << "Podaj liczbę: ";
std::cin >> suggestion;

if( std::cin.fail() == false )
{
   
    std::cout << "OK" << std::endl;
   
}

else

{
   
    std::cout << "Konieczne jest podanie jakiejś liczby całkowitej." << std::endl;
   
}
Przy podaniu jakiegoś znaku zamiast liczby pętla do {} while wraca na początek, ale zaczyna powtarzać się w nieskończność razem z instrukcją zawartą w else {}, zamiast zatrzymać się od nowa przy:
C/C++
std::cout << "Podaj liczbę: ";
std::cin >> suggestion;

...by można było znowu wprowadzić znak

Bardzo proszę o pomoc.
P-44434
Kaniorek
» 2011-11-21 14:17:33
Nie ten dział...
P-44436
winterfresh
» 2011-11-21 14:22:26
Hmm ja ten problem rozwiązałem "po swojemu" czyli tak:

C/C++
#include <iostream>
#include <ctime> // dla time
#include <cstdlib> // dla rand,srand

using namespace std;

int main()
{
    srand( time( NULL ) );
    int liczba_wylosowana =(( rand() % 1000 + 1 ) ); //losuje liczbe 1-1000
    int twoja_liczba;
    static int liczba_prob;
   
    cout << liczba_wylosowana << endl;
   
    while( twoja_liczba != liczba_wylosowana )
    {
        cout << "Podaj liczbe: "; cin >> twoja_liczba;
        liczba_prob++;
       
        if(( twoja_liczba <= 500 ) &&( liczba_wylosowana > 500 ) )
        {
           
            cout << "----------------------------\n" <<
            "Wskazowka: wylosowana liczba jest wieksza od 500." <<
            "\n----------------------------" << endl;
        }
       
        else if(( twoja_liczba >= 500 ) &&( liczba_wylosowana < 500 ) )
        {
            cout << "----------------------------\n" <<
            "Wskazowka: wylosowana liczba jest mniejsza od 500." <<
            "\n----------------------------" << endl;
        }
       
    }
   
    cout << "----------------------------\n" <<
    "Brawo zgadles! Liczba twoich prob to: " << liczba_prob <<
    "\n----------------------------" << endl;
   
   
   
   
}

Przeanalizuj sobie ten program :) Ja go troszkę urozmaiciłem oraz dodałem, że wyświetla liczbę jaką wylosował (żeby mi było łatwiej zgadnąć:P).
P-44437
SeaMonster131
» 2011-11-21 14:40:53
Trzeba czyścić strumień za każdym razem, inaczej pętla się..zapętla :)
P-44438
Sebek2011
Temat założony przez niniejszego użytkownika
» 2011-11-21 14:56:40
@Kaniorek, wybacz, teraz już wiem :(
@winterfresh, dzięki, miałem problem z std::cin.sync() i przez to straciłem prawie całą noc na zastanawianiu się co jest nie tak :/ :D
@SeaMonster131, dokładnie zapomniałem, że autor kursu wspomniał o niedziałającym std::cin.sync() pod Linuksem i ja właśnie korzystałem z tej metody zamiast std::cin.ignore( 1000, '\n' ). Już wszystko gra, dzięki za zainteresowanie.
P-44439
« 1 »
  Strona 1 z 1