2013-05-27 4 views
7

저는 초보자이며 온라인 강의에서 다음 코드를 이해하려고합니다. 문자열을 스캔하여 정수를 찾습니다. 문자가 발생하면 sscanf가 실패합니다.sscanf 비헤이비어/리턴 값

int n; char c; 
if (sscanf(string, " %d %c", &n, &c) == 1) 
    //return the integer 

else 
    // fail 

나는 sscanf를위한 매뉴얼 페이지를 읽고 여전히 반환 값을 확인하고 왜이 코드가 작동에 대한 혼란 스러워요했습니다. 그들은 "이 함수는 할당 된 입력 항목의 수를 반환합니다"라고 설명합니다.

sscanf가 문자 만 만날 경우 &c ...에 기록하지만이 경우 & n에 기록되지 않습니다. 이 경우 sscanf의 반환 값은 여전히 ​​1이라고 생각했을 것입니다.

+2

'sscanf'는 '% d'을 (를) 건너 뛰지 않고 '% c'을 (를) 먹습니다. 숫자가 처음으로 나오지 않으면 0을 반환합니다. –

+0

어떤 이유로 sscanf가 너무 엄격하게 (형식 문자열 당) 순전히 나를 피할 수있었습니다. 감사! – drjimmie1976

답변

6

sscanf가 %d을 성공적으로 읽었을 경우 1 (하나의 매개 변수가 할당 됨)을 반환합니다. 숫자 앞에 문자가 있으면 0을 반환합니다 (존재하지 않는 정수를 먼저 찾아야하므로 매개 변수가 지정되지 않았습니다). 추가 문자가있는 정수가 있으면 두 매개 변수를 모두 할당 할 수 있으므로 2을 반환합니다.

printf("%d",sscanf(string, " %d %c", &n, &c)); 

이 아마 터미널에 sscanf의 반환 값을 인쇄하여 의심을 취소합니다

+0

감사합니다. 나는 그 행동이 질서에 관계없이 단지 저장하는 것이라고 생각했기 때문에 혼란이 있었다. – drjimmie1976

2

당신은 항상 다음과 같은 printf 문에 넣어하여 함수가 리턴을 확인할 수 있습니다. 또한

이를 확인하실 수 있습니다 :

+0

'printf ("% d \ n", sscanf (문자열, "% d % c", & n, &c));'? – rootkea

+0

네, 고맙습니다. :) –

4

:) 도움이 cplusplus : sscanf

희망 귀하의 sscanf(string, " %d %c") 돌아갑니다 EOF, 0, 1 또는 2 :

2 : 귀하의 의견이 일치하는 경우 다음과 같은
[선택적 공백] [10 진수 *] [선택적 공백] [임의의 문자] [별도로 무시]

1 : 귀하의 의견은 다음과
[선택 공간 이상 실패했지만 일치하는 경우 [진수를 *] [선택 공간] [더 이상 데이터가 없습니다]

[수정]
0 : 만약 당신의 입력 후 공백과 선택적 기호는 숫자를 찾지 못했습니다 : 예 : "z" 또는 "-".

EOF : 입력이 비어있는 경우 "" 또는 공백 만 입력 한 경우.

  • 10 진수 앞에는 기호 문자 + 또는 -이 올 수 있습니다.