Δημοσιεύτηκε: 03 Αύγ 2011, 01:58
Μια παραπλήσια υλοποίηση, που δεν επηρεάζεται από τη σειρά με την οποία θα δοθούν το αρχικό και το τελικό έτος και δεν υποφέρει και από το γνωστό πρόβλημα της 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;
}
Δείγμα Εξόδου:
