내 입력 값은 말 :는 scanf 형식 지정자 만 수 읽기에
0, 6, -20, 20
나는 현재이 라인을 사용하고 있습니다 :
"2a", "6", "-20" "+20"
내가 정수에 다음 값을 읽을 수 코드 :
sscanf(input, "%d", &some_integer);
그러나 "2a"는 정수 값이 2로 읽습니다. 어떻게 "2a"를 0으로 읽을 수 있습니까?
내 입력 값은 말 :는 scanf 형식 지정자 만 수 읽기에
0, 6, -20, 20
나는 현재이 라인을 사용하고 있습니다 :
"2a", "6", "-20" "+20"
내가 정수에 다음 값을 읽을 수 코드 :
sscanf(input, "%d", &some_integer);
그러나 "2a"는 정수 값이 2로 읽습니다. 어떻게 "2a"를 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;
}
sscanf()
과 "%n"
지정 독서를 계속 얼마나 많은 포인터를 읽고 사전에 문자 알이 작업을 수행 할 수 있습니다.strtol()
을 사용하여 읽음 값을 정수로 변환하면 변환 할 수없는 첫 번째 문자가 발견되면 변환이 중지되고 인수는 유효한 HEX 번호이므로 base
인수는 매우 중요합니다.*endptr == '\0'
을 만족하는지 확인하십시오., 이것은 당신이 그냥 컨버터블 아니라면 값이 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;
}
또는 이렇게 할 수 있습니다. %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"));
}
캔트! ... 15 자 ... –
시나리오의 종류를 수동으로 확인할 수있는 빠른 방법이 있습니까? – maxhud
입력 내용이 프로그램에 어떻게 공급되고 있습니까? 그것은 문자열인가요? 아니면 한 번에 하나씩 입력합니까? 문자열을 토큰으로 분리하고 isdigit 함수 (http://www.cplusplus.com/reference/cctype/isdigit/)를 사용하여 토큰 중 하나에 모든 숫자가 포함되어 있지 않은지 확인하십시오. 그렇지 않으면 출력 할 수 있습니다 0으로 – Rush