[C++] Błąd w strukturze

Awatar użytkownika
alchem
Użytkownik
Użytkownik
Posty: 252
Rejestracja: 10 cze 2014, o 19:10
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 83 razy
Pomógł: 5 razy

[C++] Błąd w strukturze

Post autor: alchem »

Mam kod, w którym jest struktura:

Kod: Zaznacz cały

#include <iostream>
#include <cstdlib>

//using namespace std;

struct Data
{
   int dzien_;
   int miesiac_;
   int rok_;
};

void podanie_daty(Data a);

void poprawna_data(int dzien, int miesiac, int rok);

bool TaSama (Data a, Data b);


int main()
{
   Data pierwsza_data, druga_data;

   podanie_daty(pierwsza_data);
   podanie_daty(druga_data);
   std::cout << pierwsza_data.dzien_ << " " << pierwsza_data.miesiac_ << " " << pierwsza_data.rok_<< " " <<
   druga_data.dzien_ << " " << druga_data.miesiac_ << " " << druga_data.rok_ <<std::endl;



   poprawna_data(pierwsza_data.dzien_, pierwsza_data.miesiac_, pierwsza_data.rok_ );
   poprawna_data(druga_data.dzien_, druga_data.miesiac_, druga_data.rok_ );

   std::cout << TaSama(pierwsza_data, druga_data);

 return EXIT_SUCCESS;
}

void podanie_daty(Data a)
{

  std::cout << "Podaj dzien: ";
  if(!(std::cin >> a.dzien_))
  {
   std::cout << "Nie podales liczby!";
   exit(0);
  }

  std::cout << "Podaj miesiac: ";
  if(!(std::cin >> a.miesiac_))
  {
   std::cout << "Nie podales liczby!";
   exit(0);
  }

  std::cout << "Podaj rok: ";
  if(!(std::cin >> a.rok_))
  {
   std::cout << "Nie podales liczby!";
   exit(0);
  }


}

void poprawna_data(int dzien, int miesiac, int rok)
{
     if( miesiac < 0 || dzien < 0 )
    {
     std::cout <<"Podales ujemny miesiac lub dzien!";
     exit(0);
    }
    if(miesiac>12)
     {
         std::cout << "Nie ma wiecej niz 12-stu miesiecy";
         exit(0);
     }
     if((rok == 1582 && miesiac == 10 && dzien<4) || rok<1582 || (rok == 1582 && miesiac < 10 ))
    {
     std::cout<< "Kalendarz gregorianski obowiazuje od 4 pazdziernika 1582 roku!";
     exit(0);
    }
    if( (miesiac == 1 || miesiac == 3 || miesiac == 5 || miesiac == 7 || miesiac == 8 || miesiac == 10 || miesiac == 12 ) && dzien > 31)
     {
         std::cout << "W podanym przez Cb miesiacu nie ma wiecej niz 31 dni";
         exit(0);
     }
    if( (miesiac == 4 || miesiac == 6 || miesiac == 9 || miesiac == 11 ) && dzien > 31)
     {
         std::cout << "W podanym przez Cb miesiacu nie ma wiecej niz 30 dni";
         exit(0);
     }
    if(((( rok%4 == 0) && (rok % 100 != 0)) || (rok % 400 == 0)) && dzien>29 && miesiac == 2 )
    {
     std::cout << "W roku przestepnym w lutym jest tylko 29 dni";
     exit(0);
    }
    if(((( rok%4 != 0) && (rok % 100 != 0)) || (rok % 400 != 0)) && dzien>28 && miesiac == 2 )
    {
     std::cout << "W roku nieprzestepnym w lutym jest tylko 28 dni";
     exit(0);
    }
}

bool TaSama (Data a, Data b)
{
 if( a.rok_     !=  b.rok_ )         return false;
 if( a.miesiac_ !=  b.miesiac_ )     return false;
 if( a.dzien_   !=  b.dzien_ )       return false;
                                     return true;
}
Jednak kiedy chce przypisać jakąś wartość np do pierwsza_data poprzez funkcje
void podanie_daty(Data a); to w tych zmiennych siedzą liczby z kosmosu, wie ktoś co robię źle? (26/27 linijka- sprawdzam co funkcja przypisała do tych zmiennych)-- 23 maja 2016, o 17:14 --Problem rozwiązany.
Ostatnio zmieniony 23 maja 2016, o 14:11 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
SlotaWoj
Użytkownik
Użytkownik
Posty: 4211
Rejestracja: 25 maja 2012, o 21:33
Płeć: Mężczyzna
Lokalizacja: Kraków PL
Podziękował: 2 razy
Pomógł: 758 razy

[C++] Błąd w strukturze

Post autor: SlotaWoj »

Skoro sam rozwiązałeś problem, to mogłeś swój post usunąć. Ponieważ nie zrobiłeś tego, to powinieneś poinformować innych użytkowników forum na czym polegał błąd w Twoim programie. Informacja: problem rozwiązany nie dla nas satysfakcjonująca.
Awatar użytkownika
alchem
Użytkownik
Użytkownik
Posty: 252
Rejestracja: 10 cze 2014, o 19:10
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 83 razy
Pomógł: 5 razy

[C++] Błąd w strukturze

Post autor: alchem »

Funkcja podanie_daty musi pracowac na oryginale, to wszystko.
ODPOWIEDZ