아래 두 프로그램을 실행 한 결과에 대해 sscanf
동작을 이해하려고합니다.C sscanf 동작
void main()
{
char *a = "225.311";
int x = 0, y = 0;
sscanf(a, "%d.3%d", &x, &y);
printf("x is %d, y is %d\n", x, y);
}
출력은 프로그램 아래
x is 255, y is 11
내 기대에 따라 작동하지 않을 것입니다.
void main()
{
char *a = "225.311";
int x = 0, y = 0;
sscanf(a, "%d5.3%d", &x, &y);
printf("x is %d, y is %d\n", x, y);
}
나는 25,11
을 기대하고있다,하지만 난 sscanf
행동이 반대 방식으로 sprintf와 같은 정확한한다 기대하고
x is 255, y is 0
출력이다. 하지만 내 두 번째 프로그램에서 작동하지 않습니다. 지정된 형식이 %d5.3%d
인 경우 delimeter로 5
을 고려해야합니다. 그러나 고려하지 않고 모든 자릿수를 x
에 대해 읽은 다음 점이 5.3%d
과 일치하지 않아 종료됩니다.
누군가 설명해주세요.
'[s] scanf'의 반환 값을 항상 확인하십시오. 사용한 자리 표시 자의 수와 같지 않은 경우 몇 가지 오류가 발생했음을 알 수 있습니다. – Crozin
'scanf '에 대한 문서 또는 맨 페이지를 읽으십시오. 가정하지 마십시오 ...이 텍스트 패밀리 패밀리는 많은 힘을 가지고 있지만, 그 힘은 기본값보다 말할 가치가있는 것보다 더 많은 책임이 있다고 말하고 싶습니다. 사용자 관점에서 직관적이지 않을 수 있습니다.표준 C'fgets'또는 GNU/POSIX2008'getline'을 사용하여 라인을 읽은 다음'sscanf '로 구문 분석하는 것이 더 좋습니다. – hyde