C Проверка ввода пользователя - требуется только один символ, который преобразуется в int. - PullRequest
0 голосов
/ 11 ноября 2011

У меня проблема с пользовательским вводом в C. Я хочу взять только первый номер. Я фильтрую пользовательский ввод по символам, но когда я ввожу 2 цифры (неправильный ввод пользователя), программа начинает вести себя странно

отображает:

Turn 2 : What number? 21
Turn 2 : What number?  1 6 2 4 2

//User input validation
int GetColorGuess(int counter)
{
    int color=1;
    int inputChar=' ';
    do{
        printf("Turn %d : What number? ",counter);
        inputChar=getchar();
        getchar();
    }
    while(inputChar<((int)'1') || inputChar>selectedColorSize+'0');

    color = digit_to_int(inputChar);

    return color;
}
//convert char which represents digit to int
int digit_to_int(char d)
{
 char str[2];
 str[0] = d;
 str[1] = '\0';
 return (int) strtol(str, NULL, 10);
}

Может кто-нибудь помочь мне в чем проблема?

1 Ответ

3 голосов
/ 11 ноября 2011

При вводе «21» ваш первый getchar () читает «2», следующий getchar, который, вероятно, должен есть символ новой строки, читает «1».когда вы вводите «3», ваш первый getchar читает символ новой строки, а ваш второй getchar () - «3».Измените код, чтобы использовать вместо него sscanf.

...