Δημοσιεύτηκε: 03 Αύγ 2011, 01:58
από migf1
Μια παραπλήσια υλοποίηση, που δεν επηρεάζεται από τη σειρά με την οποία θα δοθούν το αρχικό και το τελικό έτος και δεν υποφέρει και από το γνωστό πρόβλημα της scanf με τα απομεινάρια στο buffer της κύριας εισόδου ;)

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

#include <stdio.h>

#define validyear(y) ( (y) > 399 && (y) < 10000 )
#define isleap(y) ( !((y) % 4) && ( (y) % 100 || !((y) % 400) ) )

int main (void)
{
char inbuf[256]="";
int y1, y2, y, dummy;

puts ("ΣΗΜΕΙΩΣΗ: έγκυρα έτη από 400 έως 9999\n");
do {
printf("Δώστε αρχικό & τελικό έτος (π.χ. 400 9999 ): ");
fgets(inbuf, 256, stdin);
dummy = sscanf(inbuf, "%d %d", &y1, &y2);
} while ( dummy < 2 || !validyear(y1) || !validyear(y2) );

if ( y1 > y2 ) {
dummy = y1;
y1 = y2;
y2 = dummy;
}

puts("\nΔίσεκτα Έτη:");
for (y = y1; y < y2+1; y++)
if ( isleap(y) )
printf ("%4d ", y);
puts("\n");

return 0;
}

Δείγμα Εξόδου:

Εικόνα