【C语言-11】快速学会scanf函数
前两节中我们讨论了printf函数,探究如何将整数,浮点数,字符串等打印到屏幕上去。
既然有输出,怎么能没有输入呢?这一节,我们就来介绍与printf相反的scanf函数。
printf函数将二进制表示的整数、浮点数、字符、字符串等按照转换规范转换成字符,并打印在控制台上。与之相反,scanf将键盘输入的字符串根据转换规范,转换成二进制表示的整数、浮点数、字符或字符串等。
#include <stdio.h>
int main()
{
char c;
short s;
int n;
long l;
float f;
double df;
scanf("%hhd %hd %d %ld %f %lf", &c, &s, &n, &l, &f, &df);
printf("%d %d %d %d %f %f\n", c, s, n, l, f, df);
return 0;
}
运行程序后,在键盘输入:“1 2 3 4 5.6 7.8”。scanf函数,将字符串"1 2 3 4 5.6 7.8",根据转换规范,分别转换为各类二进制数据,并存储到变量中。
printf函数将这些变量,按照转换规范,再转换为字符串,输出到控制台。
1. scanf函数的使用公式
- scanf是一个变参函数。
- scanf的第一个参数是字符串。
- scanf的第一个参数内容为匹配字符以及转换规范。
- scanf的后续参数,是转换完成后,数据的存放位置。
- 转换规范的写法与数量,需要与后续的参数类型和数量对应。
1.1 scanf是一个变参函数
和printf一样,scanf也是一个变参函数。之前我们也说了,变参函数中参数的数量和类型不确定。
1.2 scanf的第一参数是字符串
1.3 scanf的第一个参数为匹配字符以及转换规范。
请注意:输入时,需要按照第一个字符串的形式进行输入,否则无法得到正确结果。
例1:
scanf第一个字符串为"%hhd %hd %d %ld %f %lf"
,每个转换规范使用空格分割。那么输入时需要用空格进行分割,形如1 2 3 4 5.6 7.8
。
例2: scanf第一个字符串为"%hhd,%hd,%d,%ld,%f,%lf"
,每个转换规范使用,
分割。那么输入时需要用逗号进行分割,形如1,2,3,4,5.6,7.8
。
例3: scanf第一个字符串为"%hhd+%hd-%dx%ld/%f\~%lf"
,转换规范使用+-x/~分割。那么需要像这样输入1+2-3x4/5.6~7.8
。
总而言之,scanf会将输入的字符串与第一个参数进行匹配,从而找到需要转换的部分。 若字符串匹配失败,将无法得到正确的转换结果。
1.4 scanf的后续参数,是转换完成后,数据的存放位置。
scanf将输入的字符串按照对应的转换规范进行转换,转换完成后的二进制,将依次存放到后续参数所输入的变量地址当中。暂时这里不讨论什么是变量的地址,请记住两个规则:
如果scanf将转换后的二进制存储到基本变量当中,请在变量名前加&。
如果scanf将字符串存储到字符数组中,字符数组名不用加&。