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