Obiektowe C++ Problem z zabezpieczaniem programu przed podaniem liczb nie będące w przedziale
Ostatnio zmodyfikowano 2019-04-14 11:25
matikwe12 Temat założony przez niniejszego użytkownika |
Obiektowe C++ Problem z zabezpieczaniem programu przed podaniem liczb nie będące w przedziale » 2019-04-13 11:37:44 Proszę o pomoc, piszę program w, którym chcę zrobić by dla każdego miesiąca przyjmował poprawne dni i rok nie był większy niż 10 tysięcy. Co robię źle, program wyświetla złe dane. #include <iostream> #include <conio.h> using namespace std;
class Date { private: int dzien, miesiac, rok; public: int getdzien() const; int getmiesiac() const; int getrok() const; Date(); Date( int, int, int ); void setall( int dzien, int miesiac, int rok ); void wyswietl() { cout << dzien << "." << miesiac << "." << rok; } };
int Date::getdzien() const { return this->dzien; } int Date::getmiesiac() const { return this->miesiac; } int Date::getrok() const { return this->rok; } Date::Date() { dzien = 1; miesiac = 1; rok = 1970; }
Date::Date( int dzien, int miesiac, int rok ) { this->dzien = dzien; this->miesiac = miesiac; this->rok = rok; }
void Date::setall( int dzien, int miesiac, int rok ) { if( this->miesiac <= 12 && this->miesiac >= 1 ) { this->miesiac = miesiac; switch( this->miesiac ) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: { if( this->dzien >= 31 && this->dzien <= 0 ) { cout << "Podaj prawidlowy przedzial dniowy"; } else { this->dzien = dzien; } } break; case 2: { if( this->dzien >= 29 && this->dzien <= 0 ) { cout << "Podaj prawidlowy przedzial dniowy"; } else { this->dzien = dzien; } } break; case 4: case 6: case 9: case 11: { if( this->dzien >= 30 && this->dzien <= 0 ) { cout << "Podaj prawidlowy przedzial dniowy"; } else { this->dzien = dzien; } } break; } } if( this->rok < 10000 && this->rok > 0 ) { this->rok = rok; } }
int main() { Date op_1; op_1.setall( 31, 13, 1000 ); op_1.wyswietl(); _getch(); return 0; }
|
|
pekfos |
» 2019-04-13 11:42:17 Testujesz this->rok, nie rok. |
|
matikwe12 Temat założony przez niniejszego użytkownika |
» 2019-04-13 13:19:48 Możesz dokładnie, nie wiem o co chodzi. |
|
pekfos |
» 2019-04-13 14:11:13 Jest tak dokładnie, jak tylko się da. Testujesz wartość this->rok (aktualną w obiekcie), a nie rok (nową wartość). if( this->rok < 10000 && this->rok > 0 ) { this->rok = rok; } |
I to samo ze wszystkimi innymi argumentami Date::setall(). |
|
matikwe12 Temat założony przez niniejszego użytkownika |
» 2019-04-14 11:25:56 Dziękuję bardzo teraz dopiero zrozumiałem poprawne zastosowanie this. Jeszcze raz dziękuję :) Niżej daję poprawny kod jakby komuś się przydał. int Date::getdzien() const { return this->dzien; } int Date::getmiesiac() const { return this->miesiac; } int Date::getrok() const { return this->rok; } Date::Date() { dzien = 1; miesiac = 1; rok = 1970; }
Date::Date( int dzien, int miesiac, int rok ) { this->dzien = dzien; this->miesiac = miesiac; this->rok = rok; }
void Date::setall( int dzien, int miesiac, int rok ) { bool ok_miesiac = true; if( miesiac <= 12 && miesiac >= 1 ) { this->miesiac = miesiac; } else { cout << " podaj dobry miesiac "; ok_miesiac = false; } if( ok_miesiac == true ) { switch( this->miesiac ) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: { if( dzien <= 31 && dzien > 0 ) { this->dzien = dzien; } else { cout << " Podaj prawidlowy przedzial dniowy "; } } break; case 2: { if( dzien <= 29 && dzien > 0 ) { this->dzien = dzien; } else { cout << " Podaj prawidlowy przedzial dniowy "; } } break; case 4: case 6: case 9: case 11: { if( dzien <= 30 && dzien > 0 ) { this->dzien = dzien; } else { cout << " Podaj prawidlowy przedzial dniowy "; } } break; } } else { cout << " podales zly dzien w danym miesiacu "; } if( rok < 10000 && rok > 0 ) { this->rok = rok; } else { cout << " podaj dobry przedzial roku "; } }
|
|
« 1 » |