输入指令scanf
如果把计算机比作一个人,那么printf指令是让计算机具备说的能力,而scanf指令是让计算机具备听的能力。
用术语来描述,计算机说的能力是“输出”,计算机听的能力是“读入”。
输入指令scanf,也称为格式化输入指令,最常用于从键盘读入信息。
与printf类似,scanf对输入格式的设定也是通过scanf的参数实现。
例如:
int a;
scanf("%d", &a);
printf("%d\n", a);
上面的语句中,先在内存中分配一个变量盒子a,因为我们马上要从键盘接受信息并放入盒子a中,所以我们没有必要对变量a进行初始化。第二条语句是从键盘接受一个整数,并将这个整数放入变量a中。第三条语句是将变量a中的整数打印在电脑屏幕上。
第二条语句中的变量a前面有符号“&”,而第三条语句中没有。因为,当要把从键盘读入的信息放入变量a中的时候,需要告知计算机变量盒子a的地址,计算机是根据地址把接受的信息写入变量盒子a中。第三条语句中,把变量盒子a中的信息取出来,则可以直接用变量的名称就可以去除变量盒子中的信息,不需要符号“&”。
符号“&”,被称为“取址符”,可以获取变量a在内存中的地址。
输入多个数
用一条语句读入多个数。
例如:
int a, b;
scanf("%d%d", &a, &b);
第二条语句中,从键盘读入两个整数,分别放入变量a和变量b中,完成信息输入。
但有些时候,从键盘实际输入的内容与希望输入的格式不匹配,就会出现意料之外的结果。
例如:
int a;
float b;
scanf("%d%f", &a, &b);
printf("%d\n", a);
printf("%.3f\n", b);
第三条语句中,是先读入一个整数放入变量a中,在读入一个浮点数放入变量b中。正常的键盘输入类似:18 2.339,则数字18会写入变量a中,2.339会写入变量b中,用printf输出的时候,分别输出18和2.339。但是,当用键盘输入数字18.339 2并回车的时候,会发现是数字18写入变量a中,而0.339写入变量b中,而数字2则被完全忽略,最终的输出结果是18和0.339。
scanf的返回值
scanf有返回值,返回值的类型为int型整数,含义为成功输入的数据项的个数,也即已匹配的输入项的个数。
例如:
int a;
float b;
scanf("%d%f", &a, &b);
上面的语句中,当成功写入两个数字到变量a和b中后,scanf会返回数字2。
再例如:
float a;
scanf("%f", &a);
上面的语句中,当输入字符‘c’之后,计算机发现字符‘c’无法写入浮点型变量的盒子a中,写入失败,会返回数字0。