以下陈述之间有什么区别

时间:2013-08-18 02:23:02

标签: c

以下2个scanf语句之间的区别是什么

#include<stdio.h>  
void main()  
{  
    int a,b;
    clrscr();
    printf("\n Enter values for a and b");
    scanf("%d",&a); // Format specifier as %d
    scanf("%i",&b); // Format specifier as %i
    printf("\n a is %d and b is %i",a,b);
    getch();
}

我将值a设为10,b设为20.它给出与输出相同的值,
所以我的问题是 %d和%i之间有什么区别。??
每个变量的内存怎么样?
%d和%i之间是否有任何区别作为格式说明符???

2 个答案:

答案 0 :(得分:2)

请参阅scanf的文档。为方便起见,%i(整数)作为占位符意味着:

  

任意数量的数字,可选地以符号(+或 - )开头。   默认采用十进制数字(0-9),但0前缀引入八进制数字(0-7)和0x十六进制数字(0-f)。

...和%d(十进制整数)表示:

  

任意数量的十进制数字(0-9),可选地以符号(+或 - )开头。

答案 1 :(得分:0)

请参阅“man scanf”的输出。

   d      Matches  an  optionally signed decimal integer; the next pointer
          must be a pointer to int.

...

   i      Matches an optionally signed integer; the next pointer must be a
          pointer  to  int.   The  integer is read in base 16 if it begins
          with 0x or 0X, in base 8 if it begins with 0,  and  in  base  10
          otherwise.   Only  characters  that  correspond  to the base are
          used.

这意味着:%d只读取带符号的十进制整数。 %i读取有符号整数,十进制/八位/十六进制取决于您的输入。它以0x开头或0X为十六进制,开始0为八位,其他为十进制。