obi2exe Temat założony przez niniejszego użytkownika |
Wczytywanie oczekiwanego typu zmiennych. » 2013-06-10 13:48:32 Witam. Pisze prosty program C++, jako zadanie treningowe, z poradnika umieszczonego w tym serwisie. 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. Mój problem polega na tym, że program nie jest odpowiednio zabezpieczony przed użytkownikiem Yeti. Jeżeli podam liczbę z rozwinięciem dziesiętnym np, 12,5. program i tak losuje. Jestem zadowolony na ten moment w jaki sposób aplikacja działa, ale denerwuje mnie wczytywanie zmiennej, którą sam wybieram, ta musi być całkowita dodatnia. To mój kod: #include <iostream> #include <cstdlib> using namespace std; int main() { int wybrana, wylosowana, naliczanie; naliczanie = 0; do { cin.clear(); cin.sync(); naliczanie++; cout << endl; cout << "Wybierz liczbe:"; cin >> wybrana; if( cin.fail() ) { cout << "Podaj liczbe z zakresu od 1 do 20..."; cin.clear(); cin.sync(); } else { wylosowana = rand(); cout << "Wylosowana liczba to:" << wylosowana; if( wybrana != wylosowana ) cout << endl << "Nie trafiles, sprobuj jeszcze raz..."; } } while( wybrana != wylosowana ); cout << endl; cout << "Szczesliwy strzal..." << " Za" << " " << naliczanie << " " << "razem."; } |
|
Berux |
» 2013-06-10 14:10:26 Możesz tu użyć rzutowania. Poczytaj o tym :) double i;
cin >> i;
if( i !=( int ) i ) { }
To samo możesz wykorzystać na innych typach. |
|
obi2exe Temat założony przez niniejszego użytkownika |
» 2013-06-10 15:00:39 Niestety takie ujęcie instrukcji nic nie zmienia, program dalej czyta również liczby niecałkowite. Gdyby było można sformułować coś takiego w instrukcje: Jeżeli liczba należy do całkowitych dodatnich wykonuj dalszą część.
|
|
DejaVu |
» 2013-06-10 17:25:32 Wydaje mi się, że powinieneś olać problem użytownika yeti w przypadku, gdy uda się wczytać choć fragment liczby. Program powinien się poprawnie zachować gdy wprowadzony tekst ewidentnie nie będzie liczbą tj. będzie się zaczynał np. od litery. |
|
MrPoxipol |
» 2013-06-10 17:32:22 |
|
obi2exe Temat założony przez niniejszego użytkownika |
» 2013-06-10 17:38:14 Program reaguje prawidłowo ,kiedy próbuję wczytać tekst. Niemniej aby wszystko działało tak jak to sobie wymyśliłem, program winien wyrzucić odpowiedni komunikat przy próbie wpisania liczby niecałkowitej, np 14.2,31.4 . Nieoczekiwane działanie ma miejsce, ponieważ aplikacja wczytuje to co jest do kropki, np. samo 14. Niestety dopiero zaczynam zabawę z kodem i zwyczajnie brakuje mi wiadomości jak sobie z tym poradzić. |
|
obi2exe Temat założony przez niniejszego użytkownika |
» 2013-06-10 17:43:55 Kombinacje z cin.good() też nie załatwiają sprawy... Program zachowuje się w ten sam sposób. |
|
Berux |
» 2013-06-10 19:23:25 @2x up:
Typ zmiennej, której wartość pobierasz od użytkownika, to int. Jeśli użytkownik wprowadzi do programu wartość o innym typie, to program rzutuje tą wartość na wartość o typie (w twoim przypadku) int. To znaczy, że jeśli user wpisze wartośc "14.2", to program "obetnie" jego "końcówkę" i pozostanie wartość "14".
Pokombinuj trochę z rzutowaniem :). Możesz korzystać z przykładu, którego ci dałem.
|
|
« 1 » 2 3 |