scanf函数中"%i"与"%d"的区别是什么?二者是否相同?
scanf 中
%i 和 %d 的区别 二者完全不同,核心差异在于解析输入时的进制处理逻辑:
%d仅以十进制解析输入,无视任何前缀。比如输入012会被解析为十进制的 12;输入0x12会只读取到0(因为遇到非数字的x就停止解析)。%i会根据输入前缀自动识别进制:- 无前缀:按十进制解析
- 前缀为
0:按八进制解析(比如输入012会被转换成十进制的 10) - 前缀为
0x/0X:按十六进制解析(比如输入0x12会被转换成十进制的 18)
printf 中
%i 的用途 在 printf 里,%i 和 %d 的作用完全一致,都是用来输出十进制的整数值。无论变量中的数值是以何种进制存储的,最终都会被转换为十进制格式打印出来。比如变量存储的是八进制的 012(对应十进制 10),用 %i 或 %d 打印的结果都是 10。
内容的提问来源于stack exchange,提问作者Haider Shah
相关产品推荐
相关产品推荐

