Δημοσιεύτηκε: 19 Ιουν 2011, 12:37
από migf1
Επειδή πρέπει να φύγω και δεν έχω προλάβει να τεστάρω σωστά, για δες αν δουλεύει σωστά ο παρακάτω κώδικας. Αν δουλεύει, τότε τα επόμενα βήματα είναι να γίνεται έλεγχος α) για τον αν οι 2 ημερομηνίες είναι σωστές (π.χ. 29/2/2011 δεν υπάρχει) και β) για τον αν η 2η είναι μικρότερη από την 1η (ώστε να έχει νόημα μετά η αφαίρεση).

Κώδικας: Επιλογή όλων

#include <stdio.h>
#include <string.h>

#define isleap(y) ( !((y) % 4) && ( (y) % 100 || !((y) % 400) ) )

// ----------------------------------------------------------------------
int main( void )
{
int mdays[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int d1, m1, y1, d2, m2, y2, days, months, years;

// διάβασε την 1η ημερομηνία
printf("Πόσο έχει σήμερα (η μ χ): ");
scanf("%d %d %d", &d1, &m1, &y1);

// διάβασε τη 2η ημερομηνία
printf("Πότε γεννηθήκατε (η μ χ); ");
scanf("%d %d %d", &d2, &m2, &y2);

// υπολόγισε τη διαφορά μεταξύ των ημερομηνιών

days = d1 - d2;
months = m1 - m2;
years = y1 - y2;

if (months < 0) {
months += 12;
years--;
}
if (days < 0) {
days += mdays[m2-1];
if ( m2 == 2 && isleap(y2) )
days++;
months--;
}

printf("\nΕίστε %d χρονών, %d μηνών και %d ημερών \n", years, months, days);

printf("\npress ENTER to exit...");
fflush(stdin); getchar();

return 0;
}