#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int mygeti(int *result)
{
   char *end, buff [ 13 ];
   fgets(buff, sizeof buff, stdin);
   *result = strtol(buff, &end, 10);
   return !isspace(*buff) && end != buff && (*end == '\n' || *end == '\0');
}

int main(void)
{
   int value;
   do
   {
      fputs("Enter an integer: ", stdout);
      fflush(stdout);
   } while ( !mygeti(&value) );
   printf("value = %d\n", value);
   return 0;
}

/* my output
Enter an integer: one
Enter an integer:
Enter an integer: f123
Enter an integer: 123f
Enter an integer:  123
Enter an integer: 123
Enter an integer: 1.23
Enter an integer: -42
value = -42
*/

int mygeti(int *result){ char *end, buff [ 13 ]; fgets(buff, sizeof buff, stdin); *result = strtol(buff, &end, 10); return !isspace(*buff) && end != buff && (*end == '\n' || *end == '\0');}

< any idea that i can check the integer range too?

Once you've obtained an integer value, checking the range out to be trivial, right? How about taking a shot at it?

The article starter has earned a lot of community kudos, and such articles offer a bounty for quality replies.