在学习过程中,有关于scanf函数存在很多的疑问,经过查阅,最终总结如下:
1、scanf的介绍以及使用
(1) scanf函数:如果使用这个函数,要包含一个头文件 stdio.h
(2) scanf是阻塞式的函数:函数执行后,会等待用户的输入,如果用户不输入任何内容,它会一直等待。
(3)scanf函数的作用:从键盘接收用户输入的内容,保存到指定的变量中。
(4)scanf函数的格式:scanf("格式控制符",输入项的地址列表);
代码练习:
#include <stdio.h>
void test(){
//从键盘上接收一个人得年龄,然后打印出来
//获取变量的地址:用取地址符号 &
//1、定义变量
int age=-1;
//2、给一个提示,让用户输入一个年龄
printf("请输入年龄:\n");
//把用户输入的值,放到age变量中
//如果输入的是小数,此时age只保存整数部分
scanf("%d",&age); //获取了age这个变量的地址
//3、打印用户输入的年龄
printf("您输入的年龄是:%d\n",age);
}
int main(int argc, const char * argv[]) {
//接收一个小数
float score=0.0f;
printf("请输入一个分数:\n");
//接收用户输入的值保存到score中
scanf("%f",&score); //此处不允许写%m.nf,但是%mf是可以的
//打印score的值
printf("%3.2f\n",score);
test(); //调用test函数
return 0;
}
输入:99回车20回车
输出结果如下:
请输入一个分数:
99
99.00
请输入年龄:
20
您输入的年龄是:20
2、scanf使用的注意事项
(1)scanf函数当遇到回车的时候,会结束执行。
(2)接收单个变量值的时候,在输入值之前,如果我们输入了空格 回车 tab,都会被忽略。
(3)关于scanf中,尽量不要使用 \n,如果一不小心使用了:
1) 输入值后,随便输入一个内容
2)\n要原样输入
代码测试如下:
int main(int argc, const char * argv[]) {
int age=-1;
scanf("%d\n",&age); //只能输入跟scanf一样的格式,否则输出结果不正确
printf("age = %d\n",age);
return 0;
}
如上所示的代码:要想得到想要的结果,只能按照格式输入数字和\n。例如输入:20\n
输出结果是:age=20
3、scanf函数原理以及本质
(1)当用户输入内容后,用户输入的内容会被存放到scanf的输入缓冲区中。然后,scanf函数会根据格式控制的字符的要求,从输入缓冲区依次取它想要的内容。如果从缓冲区中取得内容和和我们的格式要求一致,则把值存放到变量中(%d %c %d)。如果格式不一致,则不修改变量的值。
(2)如果scanf缓冲区中还有内容,则scanf不会提示我们再次输入。
(3)运行流程:
1)首先系统会提供一个缓存(可以存储用户输入的内容的一段内存)
2)scnaf 在执行的时候,会首先到缓存中进行扫描,将取得的字符与格式化字符串进行比对,如果比对不成功,那么不读取任何字符函数结束。如果比对成功,那么读取匹配到的数据,然后结束,并将匹配到的数据转换成必要的格式,赋值给传入的变量。