3.3.2 scanf函数

scanf函数也属于C程序标准库函数,使用时也必须包含头文件“stdio.h”。scanf函数和printf函数的调用形式和处理数据的方式都十分相似。标准的调用形式如下:

        scanf(参数1, 参数2, 参数3, 参数4, …);

参数1为按照特定格式书写的字符串;其后带一个参数列表,参数2、参数3及其后的所有参数都是用来存储读取的数值的空间地址。类似地,这个函数的调用形式也可以改写为:

        scanf(字符串, 参数列表);

scanf函数的功能是从标准输入,即从键盘以特定格式读入数值,并将其依次赋值给它的参数列表中的参数指向的内存空间。如果要给变量赋值,字符串中也必须含有一些'%',scanf函数会自动将字符串中的'%'之后的若干个字符识别为特定格式。需要注意的是,与printf函数不同,scanf函数的参数列表必须使用变量地址。scanf函数从标准输入接口读取字符串后,会依照字符串中的格式相应转换为对应的数值,再将这些数值依次写到参数列表中对应的变量地址的内存空间上。

        01  int intValue = 0;                               /* 定义并初始化intValue */
        02  float floatValue = 0.0                          /* 定义并初始化floatValue */
        03  char charValue = 0;                             /* 定义并初始化charValue */
        04
        05  scanf("%d, %f, %c", &intValue, &floatValue, &charValue);/* 给三个变量赋值 */

那么在键盘需要输入的内容为:一个整数、逗号、一个浮点数、逗号和一个字符。中间的逗号不能少,否则将得不到预期结果。比如从键盘输入为:

        23,23.54,c

那么,intValue被赋值为23,floatValue被赋值为23.54,charValue被赋值为'c'。范例3-8演示了printf函数和scanf函数的联合使用。

【范例3-8】展示printf函数和scanf函数的使用,实现方法如示例代码3-8所示。

示例代码3-8

        01  #include <stdio.h>
        02
        03  int main(void) {
        04       /* 定义两个变量 */
        05       int u = 0;
        06       int v = 0;
        07
        08       printf("Th%cs is %c te%cting program%c!!\n", \
                                                        /* \为分行号 */
        09               'i', 'a', 's', '!');           /* 使用printf函数输出一个字串 */
        10
        11       scanf("ooo%dooo%dooo", &u, &v);        /* 使用scanf函数为u和v赋值 */
        12       printf("u = %d, v = %d.\n", u, v);     /* 使用printf函数输出u和v的值 */
        13
        14       return 0;
        15  }

【运行结果】程序运行后,在得到如图3-8 第1 行所示内容的结果后,输入如该图3-9 第2行所示的字符串,最后可以得到结果如图3-8中第3行所示。

【代码解析】本程序的代码分析如下:

· 第8行末的"\"的作用为分行,把一行分为两行写,编译器处理时会将下一行的内容和本行内容处理成一行。本行和第9行一起调用了一个printf函数,4个char型常量替代第8行中相应的“%c”后输出,结果如图3-8的第一行。

· 第11行为scanf函数,任务是为两个int型变量赋值。其字符串为“ooo%dooo%dooo”,如果要从标准输入获得想要的整数,必须先输入“ooo”后,输入一个整数,再输入“ooo”后,输入一个整数,再次输入“ooo”,scanf函数才能正常处理字串,为变量赋值。

图3-8 printf函数和scanf函数的使用