C语言中%d和%i格式说明符的区别

格式说明符是由初始百分比符号 (%) 形成的序列,表示格式说明符,用于指定要从流中检索并存储到附加参数指向的位置的数据的类型和格式。 简而言之,它告诉我们要存储哪种类型的数据以及要打印哪种类型的数据。
例如 – 如果我们想使用 scanf()printf() 函数读取和打印整数,则使用 %i%d,但 %i%d 格式说明符存在细微差别。

注:%d 指定有符号十进制整数,而 %i 指定整数。

printf中 %d 和 %i 的行为相似

printf%i%d 格式说明符之间没有区别。参考以下示例:

// C program to demonstrate // the behavior of %i and %d // with printf statement #include <stdio.h>  int main() {     int num = 9;      // print value using %d     printf("Value of num using %%d is = %dn", num);      // print value using %i     printf("Value of num using %%i is = %in", num);      return 0; } 

运行结果:

Value of num using %d is = 9 Value of num using %i is = 9 

scanf 中的 %d 和 %i 行为不同

%d 假设基数为 10,而%i 自动检测基数。 因此,两个说明符在与输入说明符一起使用时表现不同。 因此,012使用 %i输出是 10,而012使用%d输出为:12

  • %d 将整数值作为有符号十进制整数,即它采用负值和正值,但值应该是十进制的,否则它将打印垃圾值。(注意:如果输入是八进制格式,例如:012,那么 %d 将忽略 0 和 将输入作为 12) 参考以下示例。

  • %i 将整数值作为十进制、十六进制或八进制类型的整数值。要以十六进制格式输入值 – 值应由前面的0x提供,而以八进制格式输入的值 – 值应由前面的0提供。

参考以下示例:

// C program to demonstrate the difference // between %i and %d specifier #include <stdio.h>  int main() {     int a, b, c;      printf("Enter value of a in decimal format:");     scanf("%d", &a);      printf("Enter value of b in octal format: ");     scanf("%i", &b);      printf("Enter value of c in hexadecimal format: ");     scanf("%i", &c);      printf("a = %i, b = %i, c = %i", a, b, c);      return 0; } 

输出结果:

Enter value of a in decimal format:12 Enter value of b in octal format: 012 Enter value of c in hexadecimal format: 0x12 a = 12, b = 10, c = 18 

解释说明:

  • a 为 12 的十进制值为 12
  • b 的十进制值为 12(八进制)是 10
  • c 的十进制值为12(十六进制)是18

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/264165.html

(0)
上一篇 2022年6月7日
下一篇 2022年6月7日

相关推荐

发表回复

登录后才能评论