2011-11-11 2 views
0

C에서 사용자 입력을하는 데 문제가 있습니다. 첫 번째 숫자 만 사용하려고합니다. 나는 문자에서 사용자의 입력을 필터링하지만 2 자리 (잘못된 사용자 입력)를 입력하면 프로그램은C 사용자 입력 유효성 검사 - 단 하나의 문자 만 int로 변환됩니다.

가 표시 이상한 행동을 시작합니다

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

사람이 무엇인지 좀 도와 줄래 문제?

답변

3

"21"을 입력 할 때 첫 번째 getchar()은 '2'를 읽고, 다음 getchar은 새 라인을 먹어야하며 '1'을 읽습니다. "3"을 입력하면 첫 번째 getchar은 개행을 읽고 두 번째 getchar()은 '3'을 읽습니다. 대신 sscanf를 사용하도록 코드를 변경하십시오.