C语言中%d和%i格式说明符之间的差异

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 = %d\n", num);
	
	// print value using %i
	printf("Value of num using %%i is = %i\n", num);

	return 0;
}

    输出:

Output:
Value of num using %d is = 9
Value of num using %i is = 9
在 scanf 中,%d 和 %i 的行为不同

    %d 假设基数为10,而 %i 自动检测基数。因此,两个说明符在与输入说明符一起使用时的行为不同。对 %i 而言,012是10;对 %d 而言,012就是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;
}

    输出:

Output:
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

    说明:
    八进制的12,转换为十进制值是10
    十六进制的12,转换为十进制值是18

参考文档

[1]Shubham Bansal.Difference between %d and %i format specifier in C language[EB/OL].https://www.geeksforgeeks.org/difference-d-format-specifier-c-language/,2021-02-19.

今天的文章C语言中%d和%i格式说明符之间的差异分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/61746.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注