Rozdzial 16 Zadanie domowe | Zabezpieczenie przed wprowadzeniem złych danych
Ostatnio zmodyfikowano 2017-01-31 17:04
rambosek Temat założony przez niniejszego użytkownika |
Rozdzial 16 Zadanie domowe | Zabezpieczenie przed wprowadzeniem złych danych » 2017-01-30 13:26:48 Witam, Mam pytanie odnośnie zabezpieczenia przed wprowadzaniem błędnych liczba. Napisałęm program z pracy domowej z rozdziału 16. Zabezpieczyłem go wg. tego schematu: https://4programmers.net/C/FAQ/Zabezpieczenie_przed_wpisywaniem_liter Aczkolwiek mam pytanie: Jeżeli dałbym cina przed pętlą sprawdzającą while, a w warunku napisał while(!cin.good()) to czemu pętla wykonuje się, bo wyświetla komunikat o tym żeby wprowadzić poprawną liczbę, ale dodatkowo wyświetla komunikat z IFa (x<liczba) o tym, że liczba jest za mała i wykonuje całą petlę? Czekam na odpowiedź i pozdrawiam :) wklejam kod: #include <iostream> #include <cstdlib> #include <ctime>
using namespace std;
int x; int proba = 0;
int main() { srand( time( NULL ) ); int liczba; liczba =( rand() % 1000 ) + 1; liczba =( rand() % 1000 ) + 1; cout << "Witaj w zgadywance. Twoim zadaniem jest jak najszybsze odgadniecie wylosowanej liczby.\nPowodzenia!\n"; cout << "Wprowadz liczbe: "; while( liczba != x ) { proba++; cout << endl << proba << ". Proba "; while( !( cin >> x ) ) { proba++; cout << "Wprowadz poprawna liczbe.\n" << proba << ". Proba"; cin.clear(); cin.sync(); } if( x > liczba ) cout << "Za duza liczba, sprobuj ponownie: "; if( x < liczba ) cout << "Za mala liczba, sprobuj ponownie: "; } cout << "Gratuluje! Udalo Ci sie odgadnac wylosowana liczbe w " << proba << " probie!"; return 0; }
|
|
carlosmay |
» 2017-01-30 16:37:25 while( !( cin >> x ) ) { proba++; cout << "Wprowadz poprawna liczbe.\n" << proba << ". Proba"; cin.clear(); cin.sync(); } a to co innego, niż liczba inna od oczekiwanej. |
|
rambosek Temat założony przez niniejszego użytkownika |
» 2017-01-30 17:07:51 Rozumiem że co innego, ale efekt powinno dawać taki sam? Nie do końca rozumiem chyba...
a i co w związku z tym że użycie niezainicjowanej zmiennej? Program dziala poprawnie :P |
|
latajacaryba |
» 2017-01-30 17:12:15 Rozumiem że co innego, ale efekt powinno dawać taki sam? Nie do końca rozumiem chyba... a i co w związku z tym że użycie niezainicjowanej zmiennej? Program dziala poprawnie :P |
W takiej niezdefiniowanej (zadeklarowanej, ale nie zdefiniowanej (bez nadania wartości)) zmiennej są tzw. śmieci. Są to pozostałości w pamięci. Wypisz sobię taką zmienną x i zobaczysz, co Ci się wyświetli. Może być taka sytuacja, że w zmiennej x będzie liczba wylosowana. Oczywiście jest to praktycznie niemożliwe przy tylu kombinacjach, ale dobry zwyczaj nakazuje żeby taka zmienna była zdefiniowana. Np. program losuje liczby 1-1000 int x = 0; Przynajmniej wiesz, na czym pracujesz/ |
|
Monika90 |
» 2017-01-30 18:12:09 x jest zmienną globalną, więc jest zainicjalizowany zerem. |
|
latajacaryba |
» 2017-01-30 18:55:22 @up Upss... nie sprawdziłem gdzie zadeklarował zmienną :p Racja, wtedy zerem. |
|
rambosek Temat założony przez niniejszego użytkownika |
» 2017-01-30 23:51:02 @Monika90
ale skoro tak jest, to nie musialbym przy zmiennej proba deklarować jej na 0. A musiałem bo inaczej pokazywało mi próbę nr. kilka tysięcy?:P Ponadto czy mogłabyś mi podpowiedzieć z moim pytaniem dot. funkcji cin.good(), czemu te sprawdzenie nie działa jak należy (przynajmniej mi się wydaje jak powinno)..
pozdrawiam |
|
carlosmay |
» 2017-01-31 13:45:43 Zmienne globalne są słabym pomysłem. Można poszukać w necie dlaczego. Wstaw przykład, który chcesz rozwiązać. Opisz dokładnie czego oczekujesz, a co jest na wyjściu. |
|
« 1 » 2 |