0

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);
}

問題は何ですか?

4

1 に答える 1

3

「21」と入力すると、最初getchar()に「2」が読み取られ、getchar()おそらく改行を食べる必要がある次の「1」が読み取られます。次に「3」と入力すると、最初getchar()に改行がgetchar()読み取られ、2番目に「3」が読み取られます。sscanf代わりに使用するようにコードを変更してください。

于 2011-11-11T13:18:39.420 に答える