2014-11-08 2 views
-1
int getIndex(){ 
    int index = 0; 
    do{ 
     printf("Enter your Index(0..80),-1 to STOP,-2 to RESTART,-3 to START NEW BOARD: "); 
     scanf("%d", &index); 
    } while (!(index >= -3 && index <=80)); 

    return index; 

} 

Здравствуйте, учитывая, что я написал вышеописанный метод в C для игрового поля судоку. что я могу сделать, чтобы пользователь не ввел алфавит? и продолжайте запрос до получения действительного ввода. я только что начал C. Что меня ограничивает, это спецификатор флага scanf, я указал флаг int, который означает, что пользователь вводит строку, im привинчен.предотвратить чтение и возврат значения строки

+0

возможно дубликат [? Как проверить, если входной сигнал является числом или не в C] (http://stackoverflow.com/questions/17292545/how-to- check-if-the-input-is-a-number-or-not-in-c) – LokiSinclair

+0

привет, я хотел бы снова запросить, если пользователь ввел неверный ввод, отличный от указанного. – sutoL

+0

Вам нужно проверить возвращаемое значение 'scanf'. Прочтите документацию для этой функции. –

ответ

2

Все, что вам нужно, это проверить возвращаемое значение scanf, а затем очистить символ от входного буфера (stdin), если был введен какой-либо недопустимый ввод. Таким образом изменить свой код на следующее:

int getIndex() 
{ 
    int index = 0; 

    while(1) //infinite loop 
    { printf("Enter your Index(0..80),-1 to STOP,-2 to RESTART,-3 to START NEW BOARD: "); 
     if(scanf("%d", &index)==1) //scanf is successful scanning a number(input is a number) 
     { 
      if(index >= -3 && index <= 80) // if input is in range 
      break; //break out of while loop 
      printf("Number must be in range of -3 to 80\n"); //input is a number,but not in range 
     } 
     else //input is not a number 
     { 
     scanf("%*s"); //Clear invalid input 
     //printf("Invalid input\n"); 
     fprintf(stderr, "Invalid input\n"); //printf also works but errors are meant to be in the stderr 
     } 

    } 

    return index; 
} 
+0

Ошибка принадлежит stderr. 'fprintf (stderr," Недопустимый ввод \ n ");' –

+0

Что означает флаг% * s? – sutoL

+0

@sutoL, '% * s' сообщает' scanf' для сканирования строки ('% s'), а затем отбрасывает ее –

Смежные вопросы