2016-11-07 13 views
1

변수 M과 N에 사용자 입력 스트림의 값을 할당하려고합니다. int 유형의 M과 N을 지정하면 작동하도록 코드를 가져올 수 있습니다. 그러나 stdint.h를 사용하여 int16_t로 지정할 때 첫 번째 값은 읽지 만 마지막 값은 읽지 않습니다. 왜 이런거야? 여기 int 유형은 sscanf와 작동하지만 int16_t는 작동하지 않는 이유는 무엇입니까?

코드가 잘 작동하고

... 여기

#include <stdio.h> 
#include <stdint.h> 
int main(void) 
{ 
    char str[10]; 
    int M, N; 
    fgets(str, 10, stdin); 
    sscanf(str, "%d%d", &M, &N); 
    printf("M is: %d\n", M); 
    printf("N is: %d\n", N); 
    return 0; 
} 

가 작동하지 않습니다.

#include <stdio.h> 
#include <stdint.h> 
int main(void) 
{ 
    char str[10]; 
    int16_t M, N; 
    fgets(str, 10, stdin); 
    sscanf(str, "%d%d", &M, &N); 
    printf("M is: %d\n", M); 
    printf("N is: %d\n", N); 
    return 0; 
} 
+1

가능한 [uint32 \ _t 및 size \ _t의 printf 형식 지정자] (http://stackoverflow.com/questions/3168275/printf-format-specifiers-for-uint32-t-and-size-t)의 가능한 복제본 –

+1

tl; dr 올바른 형식 지정자를 사용하고 있지 않습니다. –

+0

어떤 대답으로도 문제가 해결되었다고 생각되면 그것을 수락하는 것을 고려해보십시오 (답의 왼쪽에있는 녹색 체크 표시). 그러면 커뮤니티에 질문에 대한 대답이 표시되고 답변자와 응답자에게 약간의 평판이 부여됩니다. – 2501

답변

7

당신은 형 int16_t에 대한 잘못된 지정자를 사용하고, 따라서 동작은 정의되지 않습니다.

sscanf(str, "%"SCNd16" %"SCNd16, &M, &N); 

와의 printf에 대한 지정이 PRId16 :

는 scanf에서 사용 int16_t에 대한 올바른 지정은 SCNd16입니다. 그것의 사용법은 동일합니다.