2012-10-17 48 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

相关问题