Rather than fix this particular program I will show how to solve ANY similar problem using a concept called an "exit condition".
The idea of an exit condition is that you have an infinite loop and it has various exit conditions. Often there are two exit conditions: one for success and one for an error.
while( true ){   /* infinite loop */
   char c = ...  /* get the character you want */
   if( c < '0' || c > '9' ){ 
      printf( "invalid character, not a digit\n" );
      continue; // get another character
   }
   ... /* do whatever you with valid data */
   if( c == '3' ) break; /* your exit condition, whatever it is */
   if( c == '7' ) exit(0); /* exit the whole program */
}
Note: If you are accepting free form input (numbers and strings), scanf is probably not a good idea. scanf accepts very specific, well-formatted input. So if you ask for a %d, then there better be a %d (decimal number) in the input or you will have problems.
For example, if you accept numbers and strings, you should take everything as strings using fgets or something like that.
Here is a complete program that does what you want:
#include <stdio.h>
#include <stdbool.h>
int main(int argc, const char * argv[]) {
  int iMaxScore = 6;
  int charInput = 0;
  int iInputValue = 0;
  while( true ){
      printf("Enter category to save score: ");
GetInput:
      charInput = getchar();
      if( charInput == 10 || charInput == 13 ) goto GetInput; /* ignore enter key */
      if( charInput == 'q' ) break;
      if( charInput < '0' || charInput > '9' ){
          printf( "invalid entry, not a digit %d\n", charInput );
          break;
      }
      iInputValue = charInput - '0';
      if( iInputValue > iMaxScore ){
          printf( "Error, input value exceeds maximum category %d\n", iMaxScore );
          continue; /* try again */
      }
      printf( "you entered category %d\n", iInputValue );
      /* continue ... */
  }
  return 0;
}