Design for a robust get_int()

     check = scanf("%d", &some_int);

check will have either a 0 or 1 assigned to it depending on whether or not the scanf() was able to make an integer conversion or not. If it does not equal 1, then the value in some_int is garbage and the input_stream has not been altered at all (it still has whatever could not be converted and can be assumed to be garbage).
     check = scanf("%d", &some_int);
     if (check != 1)
     {
       /* garbage in some_int and in input stream */
       /* tell user about garbage  */
       /* clean the input stream of all garbage */
     }
     else
     {
       /* we may have a valid integer */
       /* check to see if we have an integer or input like 12a or 3.4 */
     }

We now have to clean out the input stream and repeat the whole process.
Cleaning the input stream requires us to read and discard every character that is in the stream until we read the carriage return to indicate the end of input. To read one character at a time we will use the getchar() function. This function returns an integer value representing the ASCII value of the character read. C programming convention uses the integer variable called iochar to hold the return value from the getchar().
     int iochar;

     do
     {
       iochar = getchar();
     }
     while (iochar != '\n');

The usual (and very short) way of writing the above loop in C is
     while ((iochar = getchar()) != '\n');
Now you need to handle the portion of the algorithm to check to see if we have an integer or something like 2a or 1.2
     do
     {
       check = scanf("%d", &some_int);
       if (check != 1)
       {
         /* garbage in some_int and in input stream */
         /* tell user about garbage  */
         /* clean the input stream of all garbage */
       }
       else
       {
         /* we may have a valid integer */
         /* check to see if we have an integer or input like 12a or 3.4 */
         /* get the next character in the input stream and check it */
         if (the character is not a white space)
         {
           /* tell the user you have garbage */
           /* clean the input stream of all garbage */
           /* set whatever flag you are using to show an invalid integer */
         }
       }
     }
     while (input value is not a valid integer);

To check to see if a character is white space, take a look at the ctype.h library. You will find is_space() which should be useful. There are a lot of useful character manipulation functions in this library including toupper(), tolower(), etc.

Design for get_int_low(int *val, int low)

The premise is that get_int_low() will get an integer guaranteed to be greater than or equal to the low value. First you need to get an integer, then check to see if it is valid, if not valid give an error message and repeat.
   do
   {
      get_int(val);
      if (value input is not valid)
        print error message
   }
   while (value is not valid);

Design for get_int_bound(int *val, int low, int high)

Similar to get_int_low() in that you get an integer from the user that is guaranteed to be greater than or equal to low and less than or equal to high.