2016-11-07 80 views
1

我想將用戶輸入流中的值賦給變量M和N.如果我指定了M和N類型的int,我可以讓我的代碼工作。但是,當我使用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

[printf格式說明符for uint32 \ _t和size \ _t]的可能重複(http://stackoverflow.com/questions/3168275/printf-format-specifiers-for-uint32-t-and-size-t) –

+1

tl; dr您沒有使用正確的格式說明符。 –

+0

如果您認爲任何答案已解決您的問題,請考慮接受它(答案左側的綠色複選標記)。這將向社區表明,該問題已得到解答,並將爲您和回答者提供一些聲譽。 – 2501

回答

7

您對int16_t類型使用了錯誤的說明符,因此行爲未定義。

在scanf使用時int16_t正確說明符SCNd16:

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

而對於在printf說明符PRId16。它的用法是一樣的。

相關問題