2015-01-28 3 views
1

내 입력 값은 말 :는 scanf 형식 지정자 만 수 읽기에

0, 6, -20, 20 

나는 현재이 라인을 사용하고 있습니다 :

"2a", "6", "-20" "+20" 

내가 정수에 다음 값을 읽을 수 코드 :

sscanf(input, "%d", &some_integer); 

그러나 "2a"는 정수 값이 2로 읽습니다. 어떻게 "2a"를 0으로 읽을 수 있습니까?

+1

캔트! ... 15 자 ... –

+0

시나리오의 종류를 수동으로 확인할 수있는 빠른 방법이 있습니까? – maxhud

+2

입력 내용이 프로그램에 어떻게 공급되고 있습니까? 그것은 문자열인가요? 아니면 한 번에 하나씩 입력합니까? 문자열을 토큰으로 분리하고 isdigit 함수 (http://www.cplusplus.com/reference/cctype/isdigit/)를 사용하여 토큰 중 하나에 모든 숫자가 포함되어 있지 않은지 확인하십시오. 그렇지 않으면 출력 할 수 있습니다 0으로 – Rush

답변

0

당신은 그러나

#include <stdlib.h> 
#include <stdio.h> 

int 
main() 
{ 
    char text[100]; 
    int value; 
    int count; 
    char *endptr; 

    char source[] = "2a 6 -20 +20"; 
    char *input; 

    input = source; 
    while (sscanf(input, "%99s%n", text, &count) == 1) 
    { 
     value = strtol(text, &endptr, 10); 
     if (*endptr != '\0') 
      value = 0; 
     input += count; 

     printf("%d ", value); 
    } 
    printf("\n"); 

    return 0; 
} 
  1. 사용 sscanf()"%n" 지정 독서를 계속 얼마나 많은 포인터를 읽고 사전에 문자 알이 작업을 수행 할 수 있습니다.
  2. strtol()을 사용하여 읽음 값을 정수로 변환하면 변환 할 수없는 첫 번째 문자가 발견되면 변환이 중지되고 인수는 유효한 HEX 번호이므로 base 인수는 매우 중요합니다.
  3. 변환 된 모든 문자가 변환 된 경우 *endptr == '\0'을 만족하는지 확인하십시오.
  4. 소스 문자열에 대한 포인터를 전진시키고, 더 이상의 문자를 읽지 않을 때까지 계속 진행합니다. 당신이 필요로하는 모든 입력 문자열이 숫자인지 확인하는 경우

, 이것은 당신이 그냥 컨버터블 아니라면 값이 0 될하려는 경우 다음이,

int isdecimal(const char *const text) 
{ 
    char *endptr; 
    if (input == NULL) 
     return 0; 
    /* the 10 is to indicate that the number is in decimal representation */ 
    strtol(text, &endptr, 10); 
    return (*endptr == '\0') 
} 

를 사용해야합니다 것입니다 충분하다

int convert(const char *const input) 
{ 
    int value; 
    char *endptr; 

    value = strtol(input, &endptr, 10); 
    if (*endptr != '\0') 
     value = 0; 
    return value; 
} 
-1

또는 이렇게 할 수 있습니다. %n 변환 지정자는 이전 변환에 의해 소비 된 문자 수를 나타냅니다. 그것은 귀하의 경우 전체 문자열이어야합니다.

int convert(char *input) 
{ 
    int some_integer, n; 
    if (sscanf(input, "%d%n", &some_integer, &n) != 1) 
    { 
     printf("not a number (1)\n"); 
     return 0; 
    } 
    if (n != strlen(input)) 
    { 
     printf("not a number (2)\n"); 
     return 0; 
    } 
    return some_integer; 
} 

int main(void) 
{ 
    printf("%d\n", convert("2a")); 
    printf("%d\n", convert("+20")); 
}