2012-10-17 43 views
14

閱讀this SO question,我開始想知道 - 使用固定大小類型的scanf/printf(和家族)的正確方法是什麼?使用固定大小類型的scanf/printf(和系列)的正確方法?

例如,如果我有short intint,我會分別使用%hd%d - 很好。

但是如果我有int16_tshort int可能與int16_t不同,它取決於平臺。對於任何其他固定大小(整數)類型都是如此?


注:因爲它看起來像我收到了一些向下票,因爲我「沒有試圖谷歌這」,它看起來像我需要解釋一下:我沒有在這裏看到類似的問題,這就是爲什麼我發佈它。 SO中的大部分問題都可以使用Google進行解答,而不是在這裏提問。這將使StackOverflow不是這個地方,它實際上是現在。

而且,我沒有爲了聲望而這樣做 - 我今天已經達到了日常聲望上限(在發佈這個問題之前有24個投票)。

我的觀點是 - 我認爲這不值得贊成票。

+1

不要忘記用你的好朋友谷歌。 ;)搜索時將它命中:[「printf int16_t」](https://www.google.com/#hl=zh-CN&output=search&sclient=psy-ab&q=printf+int16_t&oq=printf+int16_t&gs_l=hp.3。 ..741.1861.0.2073.8.7.0.0.0.0.267.267.2-1.1.0.les%3B..0.0 ... 1c.1.7MPX56CVufA&PBX = 1&BAV = on.2,or.r_gc.r_pw.r_cp.r_qf。 &FP = ec63c9d2be74365f&BPCL = 35277026&BIW = 1343&波黑= 748)。 – Mike

+0

@Mike - 我沒有:)我認爲在這裏有類似的問題會很好(不,不是因爲聲譽 - 我今天已經達到了日常聲望上限(有24個upvotes,直到現在))。我認爲這不值得投票。 –

+0

+1同意你的修改。感謝澄清。 – Mike

回答

13

正確的方法是使用inttypes.h,其限定用於printf家庭和家庭scanf,例如標準的宏

printf ("%" PRId16, short_int); 
scanf ("%" SCNd16, &short_int); 
+0

很酷,謝謝:) +1並接受。 –

+0

爲什麼這比'%d'好?短不會被轉換爲「int」嗎? –

4

inttypes.h頭文件包含的宏定義了stdint.h中定義的固定寬度整數的正確格式說明符。例如,printf()int16_t的類型說明符是名爲PRId16的宏。例如:

int16_t x; 
scanf("%" SCNd16, &x); 

printf("You have entered: %" PRId16 "\n", x); 
+1

宏不包含所需的前導'%'字符。 –

+0

@ Steve-o固定。 – 2012-10-17 14:49:45

相關問題