理解转换说明符的细微差别:格式化 IO 函数中的 %i 与 %d
在格式化输入/输出领域 ( IO)函数如printf和scanf,转换说明符在指导输入或输出的格式方面起着关键作用。在这些说明符中,%i 和 %d 经常引起人们对其异同的疑问。
输出:统一存在
当用于输出操作时,例如与printf,%i 和 %d 的行为相同。它们始终以十进制格式表示整数。例如,以下代码片段演示了它们相同的输出:
int num = 123; printf("Decimal representation (%%d): %d\n", num); printf("Decimal representation (%%i): %i\n", num);
输入:独特行为
但是,当使用 scanf 或类似函数部署在输入操作中时, %i 和 %d 表现出明显的差异。 %d 仅将整数扫描为有符号十进制数。相反,%i 保留其十进制解释,但也包含十六进制(以 0x 为前缀)和八进制(以 0 为前缀)输入。
为了说明这种区别,请考虑以下示例:
int num; scanf("%%d", &num); // Only accepts decimal input scanf("%%i", &num); // Accepts decimal, hexadecimal, or octal input
如果用户输入 033,scanf 会将其解释为带有 %i 的 27(因为它将其视为八进制)并且33 和 %d(严格来说是十进制)。
总结...
虽然 %i 和 %d 在格式化 IO 中具有相似的用途,但它们的区别在于输入操作期间的行为。 %d 仅限于带符号的十进制输入,而 %i 可以无缝处理十进制和其他基本格式(十六进制和八进制)。这种理解对于根据程序的特定需求定制输入操作至关重要。
以上是C 格式化输入/输出函数中'%i”和'%d”之间的主要区别是什么?的详细内容。更多信息请关注PHP中文网其他相关文章!