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

Lekcja 16.

Ostatnio zmodyfikowano 2012-04-15 18:42
Autor Wiadomość
przedmarancza
Temat założony przez niniejszego użytkownika
Lekcja 16.
» 2012-04-15 18:06:56
Witam,
Mam taki problem nad którym sobie już główkuje dobry kawałek czasu, zadanie domowe dotyczącego zgadywania liczby od 1 do 1000 udalo mi sie zrobic i zabezpieczyc tylko nie wiem za bardzo jak napisać program w ten sposob by po podaniu zamiast liczby np. litery program nie przechodził do instrukcji warunkowej tylko prosił o podanie liczby jeszcze raz i nie naliczal próby, kod wygląda następująco (liczba wylosowana jest podana bo sprawdzalem czy wszystko sie zgadza po wpisaniu wylosowanej liczby).

C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int main()
{
   
    int liczba;
    int proba = 0;
    int liczbauzytkownika;
    srand( time( NULL ) );
    liczba =( rand() % 1000 ) + 1;
    cout << "Twoim zadaniem jest odgadniecie liczby wylosowanej przez komputer z zakresu 1-1000" << endl;
    cout << "Liczba: " << liczba << endl;
    do
    {
        proba++;
        cout << "Podaj swoja liczbe: ";
        cin >> liczbauzytkownika;
       
        if( liczbauzytkownika == liczba )
        {
            cout << "Brawo udalo Ci sie odgadnac wylosowana liczbe za " << proba << " razem." << endl;
           
        }
        else
        {
           
            if( liczbauzytkownika > liczba )
            {
                cout << "Twoja liczba jest wieksza od wylosowanej liczby, proba: " << proba << endl;
            }
            else cout << "Twoja liczba jest mniejsza od wylosowanej liczby, proba: " << proba << endl;
           
        }
        cin.clear();
        cin.sync();
       
    } while( !( liczbauzytkownika == liczba ) );
   
    return 0;
}

I kolejna kwestia dotyczy tego ze np. po wpisywaniu najpierw liczby a potem litery program zapamietuje instrukcje warunkowa dla liczby i dla litery podaje zdanie np. "Twoja liczba jest wieksza ...." mimo ze podalismy litere tak jakby w buforze pozostala informacja o poprzedniej liczbie.
P-54556
xevuel
» 2012-04-15 18:11:12
Kod daj w [cpp]...[/cpp].

Sprawdzaj, czy podana liczba mieści się w zakresie 0-9 i dopiero wtedy inkrementuj zmienną proba.

Podczas podania litery, np. "a" do zmiennej typu int jest wczytywana wartość
'a'
. Sam sprawdź efekt.
P-54557
przedmarancza
Temat założony przez niniejszego użytkownika
» 2012-04-15 18:17:35
Nie do końca rozumiem, zakres nie jest ograniczony, czyli inkrementacja ma sie znalezc w zagniezdzonej instrukcji if dotyczacej tego czy podana liczba jest ta wylosowana czy nie?
P-54558
xevuel
» 2012-04-15 18:19:33
C/C++
if( !( liczbauzytkownika >= 0 && liczbauzytkownika <= 9 ) )
     continue;

Wstaw to po odczytaniu liczby. Sprawdza to, czy liczba zawiera się w zakresie 0-9, jeśli nie, to przechodzi do następnego przebiegu pętli.

A, i inkrementację wstaw po tym fragmencie kodu.

Co do kodu... Słyszałeś o instrukcji
else if
?
P-54559
przedmarancza
Temat założony przez niniejszego użytkownika
» 2012-04-15 18:28:17
Ok to sie zgadza faktycznie przechodzi do nastepnego obiegu petli dziekuje, ale to mi nadal nie rozwiazalo problemu z zabezpieczeniem sie przed wpisaniem jakiejś litery. Kod który podałem na poczatku w prawdzie po podaniu litery nie wyrzuca zadnych błędów typu wypisuje bez końca jakis tekst ale przechodzi do instrukcji warunkowej i wypisuje tekst tak jakbysmy podali jakąś liczbę a tego chcę sie pozbyć i wlasnie w tym kierunku prosiłby o pomoc:)

Zastanawiam sie jak moglem o niej nie slyszec skoro jej uzywalem.
P-54560
xevuel
» 2012-04-15 18:34:06
Nie, ty używasz zagnieżdżonego else...if, nie tej konstrukcji co mówiłem.

Pamiętaj, że ten kod sprawdza, czy wczytana liczba jest w zakresie 0-9 - nie 1-1000.

I użyj jeszcze
C/C++
std::cin.clear();
std::cin.sync();
Po wczytaniu liczby, a przed warunkiem.
P-54561
przedmarancza
Temat założony przez niniejszego użytkownika
» 2012-04-15 18:35:20
A już rozumiem, nie słyszałem, tylko że to zadanie ma być zrobione na podstawie wiadomosci które nabyłem do tego rozdziału który przeczytałem więc musze sobie jakos radzić bez tego nawet instrukcji continue jeszcze nie było.
P-54562
przedmarancza
Temat założony przez niniejszego użytkownika
» 2012-04-15 18:42:04
Super, działa dziekuje za pomoc.
P-54563
« 1 »
  Strona 1 z 1