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

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

%d指定带符号的十进制整数, 而%i指定整数。
%d和%i的行为与printf相似
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

%d和%i行为在scanf中不同
%d假设基数为10, 而%i自动检测到基数。因此, 两个说明符在与输入说明符一起使用时的行为不同。因此, 对于%i, 012将为10, 而对于%d, 012将为12。
  • %d接受整数值作为带符号的十进制整数, 即它接受负值和正值, 但值应为十进制, 否则将输出垃圾值。考虑以下示例。
  • %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

说明:
a的十进制值为12是12
b的十进制值为12(八进制)是10
【C语言中的%d和%i格式说明符之间的区别】c的十进制值为12(十六进制)为18

    推荐阅读