Scanf  () 使用:
     跟printf ()一样,scanf ()使用控制字符串和参数数列表。它是printf ()的逆操作。控制字符串指出输入将被转换的格式。主要出在于后面的参数列表,printf ()函数使用变量名,表达示,和常量,而scanf ()使用指向变量的指针。其规则如下:如果用scanf ()读取某种基本的类型,在变量名前加上一个&。如果是把一个字符串读取进一个字符数组中,就不要使用&。
//4-15.c--------什么情况下使用&
#include <stdio.h>
int main (void)
{
       int age ;         //变量
       float assets;     //变量
       char pet [30];    //数组
       printf ("Enter your age , assets , and favorite pet .\n");
       scanf ("%d %f",&age,&assets);    //此处需要使用&
       scanf ("%s",pet);                //对char 数组不需要&
       printf ("%d $%.2f %s\n",age,assets,pet);
       return 0 ;
}
 
/*scanf ()使用空格(换行,制表符,空格)来决定怎样把输入分成几个字段。它依次把转换说明符与字段相匹配,并跳过它们之间的
 空格。在输入时我们可以分几行输入只要在每个输入项目之间至少键入一个换行符,空格,制符。惟一例个是是%c说明符,即使下一个
 字符是空格,它也会读取那个字符。scanf ()转换说明和printf ()差不多,只是printf ()把%f,%e,%E,%g.%G 用于float 和double而
 scanf ()只用于float 而double 要加一个l修饰符。
 */
 
ANSIc 中scanf ()的转换说明符
 

%c
把输入解释成一个字符
%d
把输入解释成一个有符号的十进制整数
%e,%f,%g,%a
把输入解释成一个浮点数
%E,%F,%G,%A
把输入解释成一个浮点数
%i
把输入解释成一个有符号十进制整数
%o
把输入解释成一个有符号八进制整数
%p
把输入解释成一个指针
%s
把输入解释成一个字符串;输入的内容以第一个非空白字符作为开始,并且包含直到一下空白字符的全部字符
%u
把输入解释成一个无符号十进制整数
%x,%X
把输入解释成一个有符号十六进制整数
转换说明符
意义

 
Scanf () 的转换修饰符

*
滞后赋值
Digit(s)
最大字段宽度,在达到最大字段宽度,遇到第一个空白字符时,停止对输入项的读取
Hh
把一个整数读作一个signed char 或unsigned char
Ll
把一个整数读作一个long long或unsigned long long
H,l,L
%hd和%hi 指示这个值为一个short int 中,%ho,%hx,%hu指示表示将会存储一个unsigned short int中,%ld和%li指示这个值会存储在一个long 中,%lo,%lx,%lu指示这个值存储在一个ussigned long 中,%le,%lf,%lg指示主个以double类型存储。将L与e,f ,g一起使用这个值以long double 类型存储。如果没有d,I,o,x,指示为int 而e,f,g指示float类型
修饰符
意义