【C语言-11】快速学会scanf函数

【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函数的使用公式

  1. scanf是一个变参函数。
  2. scanf的第一个参数是字符串。
  3. scanf的第一个参数内容为匹配字符以及转换规范
  4. scanf的后续参数,是转换完成后,数据的存放位置。
  5. 转换规范的写法与数量,需要与后续的参数类型和数量对应。

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将字符串存储到字符数组中,字符数组名不用加&。

1.5 转换规范的写法与数量,需要与后续的参数类型和数量对应。

编辑于 2023-09-12 11:49・IP 属地广东