Δημοσιεύτηκε: 14 Μαρ 2012, 20:13
από migf1
Τώρα τον έγραψα, για να σας δείξω το τρικάκι ;)

Επίσης, αν το εύρος τιμών είναι πολύ μεγάλο, τότε τα όρια μπορούν να οριστούν σε ξεχωριστά define...

Μορφοποιημένος Κώδικας: Επιλογή όλων
...
#define LOLIM -10001
#define HILIM 10001
#define IN_RANGE(n) ( (n) > LOLIM && (n) < HILIM )
...
int main( void )
{
int n = LOLIM;

printf( "Enter an integer from %d to %d: ", LOLIM+1, HILIM-1 );
do
mySCANF( "%d", &n );
while ( !INRANGE(n) );
...
return 0;
}

Κι αν θέλετε να το κάνετε πολύ strict, για να είναι πιο εμφανές πως π.χ. κάποιες μεταβλητές του προγράμματός σας προορίζονται αποκλειστικά για το συγκεκριμένο εύρος τιμών, μπορείτε να κάνετε κάτι σαν το παρακάτω...

Μορφοποιημένος Κώδικας: Επιλογή όλων
#include <stdio.h>
#include <stdlib.h>
...
#define MYINT_ISVALID(n) ( (n) > MYINT_LOLIM && (n) < MYINT_HILIM )

enum {
MYINT_LOLIM = -10001,
MYINT_HILIM = 10001
};

typedef int MyInt;
...
int main( void )
{
MyInt n1, n2;

printf( "Give 2 integers, in the range %d to %d: ", MYINT_LOLIM+1, MYINT_HILIM-1 );
mySCANF( "%d %d", &n1, &n2);

if ( !MYINT_ISVALID(n1) || !MYINT_ISVALID(n2) ) {
printf( "out of range error" );
exit( EXIT_FAILURE );
}

exit( EXIT_SUCCESS );
}