1.scanf函数的介绍及使用
1)scanf函数是一个阻塞式函数:函数执行后,会等待用户输入,如果用户不输入任何内容,它会一直等待。
2)scanf函数的作用:接收用户从键盘输入的内容,并保存到指定的变量中。
3)scanf函数的格式:scanf("格式控制符",输入项的地址列表);
示例:
#include <stdio.h>
// 实现在键盘上输入年龄,然后打印出来
int main(int argc,const char * argv[]) {
// 1.定义一个变量,用来储存用户输入的数据
int age = 0;
// 2.提示用户输入年龄
printf("请输入年龄:\n");
// 3.接收用户输入的数据,并传递给变量age
scanf("%d",&age);// &为取地址符
// 4.打印用户输入的年龄
printf("您输入的年龄是:%d",age);
return 0;
}
2. scanf函数的使用注意事项
1)scanf函数声明在头文件stdio.h中,所以要调用scanf函数,应先包含头文件stdio.h。
2)当用%d格式进行输出时,如果用户输入的是小数,则变量只保存整数部分。
3)当用%f格式输出实数时,可以用%mf格式,但不允许用%m.nf格式。
4) 当用%d%d格式输出两个整数时,输入的两个整数之间以空格或回车或tab隔开,不能用逗号等其他符号隔开。
5)如果在输入时,输入了多个空格、回车、tab都会被系统忽略。
6)如果要获取的内容是多个整数,中间输入了多个空格、回车、tab都会被系统忽略。
7)当需要接受数值型和字符型混合数据时,可以在输入的两个数据间用逗号等分隔符隔开:
scanf("%d,%c,%d",&a,&ch,&b); // 输入时用逗号隔开:23,a,98
8)关于域宽:可以用一个十进制数指定输入数据宽度,系统自动按域宽输入数据:
scanf("%5d",&a); // 设置域宽为5,即使用户输入多位:12345678 也只会读取前5位,即:12345
9)关于“*”:表示按指定格式读入数据但不赋予相应的变量,作用是跳过相应的读入数据:
scanf("%d%*d%d",&a,&b); // 假如用户输入 23 12 34,则会将23赋值给a,将34赋值给b,而跳过12
10)scanf中尽量不要使用\n。
如果使用了:scanf("%d\n",&age); // 要在输入值后,再输入\n,或者在输入值后,随便输入一个内容。
3.scanf函数运行原理
1)当用户输入内容后,用户输入的内容会被保存在scanf的输入缓冲区中,然后,scanf函数会根据格式控制的字符要求,从输入缓冲区依次取它想要的内容。如果从缓冲区中取得的内容和我们的格式要求一致,则把值保存到变量中,如果格式不一致,则不修改变量的值:
scanf函数要求按%d%c%d格式输入,用户输入顺序为:23,空格,l,空格,34。23是%d格式,输出23,空格是%c格式,输出空格,l不是%d格式,输出b原来的值-1。所以最后的输出结果为:23, ,-1。
2)如果scanf缓冲区中还有内容,则scanf不会提示我们再次输入:
以上代码调用了三次scanf函数,要求用户依次整形,字符型,整型数据。但是用户一次性输入了23l89,这时scanf缓冲区中储存的值为:23,l,89。第一个scanf函数只取出了23,缓冲区里还有l和89。所以第二个scanf函数不会要求用户再次输入,而是直接取出l。这时缓冲区中还有数值89,同理,第三个scanf函数也不要求用户输入,而是直接取出89。