-3

以下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 作为格式说明符有什么区别???

4

2 回答 2

2

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

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

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

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

于 2013-08-18T02:26:28.897 回答
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 开头为八进制,其他为十进制。

于 2013-08-18T03:30:09.200 回答