格式说明符是由初始百分比符号 (%) 形成的序列,表示格式说明符,用于指定要从流中检索并存储到附加参数指向的位置的数据的类型和格式。简而言之,它告诉我们要存储哪种类型的数据以及要打印哪种类型的数据。
例如 – 如果我们想使用 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
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果。
转载请注明:文章转载自 有区别网 [http://www.vsdiffer.com]
本文标题:C语言中%d和%i格式说明符的区别
本文链接:https://www.vsdiffer.com/vs/difference-d-format-specifier-c-language.html
免责声明:以上内容仅是站长个人看法、理解、学习笔记、总结和研究收藏。不保证其正确性,因使用而带来的风险与本站无关!如本网站内容冒犯了您的权益,请联系站长,邮箱: ,我们核实并会尽快处理。