Δημοσιεύτηκε: 18 Ιουν 2011, 22:57
από migf1
Υπάρχει πρόβλημα :(

Π.χ. δοκίμασε 18/6/2011 με 5/10/2000, δεν μπαίνει ούτε στο if ούτε στο else, οπότε τερματίζει χωρίς να τυπώσει τίποτα.

Υποθέτω αυτό που θέλεις να κάνεις, σαν λογική, είναι κάτι σαν το παρακάτω ε;
Κώδικας: Επιλογή όλων

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

int main( void )
{
int d1, m1, y1, d2, m2, y2, days, months, years;

// διάβασε την 1η ημερομηνία

printf("Πόσο έχει ο μήνας: ");
scanf("%d", &d1);

printf("Ποιος μήνας είναι: ");
scanf("%d", &m1);

printf("Ποια χρονιά είναι: ");
scanf("%d", &y1);

// διάβασε τη 2η ημερομηνία

printf("\nΠοσο ειχε την μερα που γεννηθηκες; ");
scanf("%d", &d2);

printf("Ποιον μηνα γεννηθηκες: ");
scanf("%d", &m2);

printf("Ποια χρονιά γεννηθηκες: ");
scanf("%d", &y2);

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

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

if (months < 0) {
months += 12;
years--;
}
if (days < 0) {
days += 30;
months--;
}

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

/*
if (month < 0 && day < 0)
{
year1 = year - 1;
month1 = 12 + month;
day1 = 30 + day;
printf("Είσαι %d χρονών, %d μηνών και %d ημερών \n", year1, month1, day1);
}
else if (month > 0 && day > 0 ) {
printf("Είσαι %d χρονών, %d μηνών και %d ημερών \n", year, month, day);
}
*/

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

return 0;
}
(άλλαξα και τα ονόματα των μεταβλητών ώστε να είναι πιο ευανάγνωστα, έβαλα τον παλιό κώδικα σε σχόλια και σου έβαλα τις αυξήσεις και τις μειώσεις με τους τελεστές += και --)

Δεν το τεστάρισα με πολλές περιπτώσεις εισόδου, αλλά δείχνει να δουλεύει σωστά όση η 2η ημερομηνία είναι μικρότερη της 1ης (άρα τώρα λείπει ο έλεγχος ώστε η 2η ημερομηνία να είναι πάντα μικρότερη ;))