------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
一、scanf函数介绍及使用
1、scanf函数介绍
1)scanf函数的特点:
是阻塞式的函数,在函数执行后,会等待用户的输入,如果用户不输入任何内容,它会一直等待
2)scanf函数的作用:
从键盘接收用户输入的内容,保存到指定的变量中
3)scanf函数格式:
scanf函数中的格式控制符和输入项地址列表都不能省略
scanf("格式控制符",输入项的地址列表);
4)格式控制字符串:
规定数据输入的格式,由格式控制符合普通字符组成,格式控制符合百分号(%)一起使用,用来说明输入数据的数据类型(格式字符)。
5)输入项地址列表:
需要接收数据的变量地址,这些输入项与格式控制字符串在类型和数量上要对应,当有多个输入项时,各个地址名之间以逗号“,”分隔。输入格式和变量类型要保持一致。
6)其它:
在C语言中,一个变量的地址可以通过地址运算符&得到。
int a = 0, b = 0; //定义两个变量并初始化
printf("&p,%p", &a, &b); //输出a,b变量的内存地址
2、scanf函数中格式控制符介绍
1)常见的格式控制符
2)常见的使用方法
基本用法一:获取输入单个整型或者实型数据
当格式控制符要求输入整型数据时,如果输入的是小数,只能保存该小数的整数部分
#include <stdio.h> // 使用scanf函数,必须包含头文件stdio.h
int main(int argc, const char * argv[]) {
//从键盘上接收一个人得年龄,然后打印出来
//1、定义变量
int age=-1;
//2、给一个提示,让用户输入一个年龄
printf("请输入年龄:\n");
//把用户输入的值,放到age变量中
scanf("%d",&age); //获取了age这个变量的地址
//3、打印用户输入的年龄
printf("您输入的年龄是:%d\n",age);
return
}
要求输入实数时,如果输入其它类型数据,则无法输出
在scanf函数中,可以控制域宽,但不能控制小数点后的位数
#include <stdio.h>
int main(int argc, const char * argv[]) {
//接收一个小数
float score = 0.0f;
printf("请输入一个分数:\n");
//接收用户输入的值保存到score中
scanf("%3f",&score); //此处不允许写%m.nf ,但是%mf是可以的
//打印score的值
printf("%3.2f\n",score);
return 0
}
二、scanf使用注意事项与原理
1、scanf使用注意事项
1)如果在输入时,输入了多个空格、回车、Tab都会被系统忽略的
2)如果要获取的内容是多个整数,中间输入量多个空格、回车、Tab都会被系统忽略
#include <stdio.h>
int main (int argc, const char * argv[]) {
int a = 0;
int b = 0;
scanf("%d%d", &a, &b);
printf("%d,%d\n",a, b);
return 0;
}
3)非法的格式输入,得不到想要的结果
4)当整型和字符型数据混合输入时,要避免“空格”添麻烦
为防止混合输入时空格造成的错误,可以通过添加普通的分隔符解决
5)scanf函数当遇到回车的时候,会结束执行
2、scanf中的修饰符
scanf函数的修饰符有:数据读入宽度(域宽、)*和长度
1)域宽:指定输入数据的宽度
int a;
scanf(%5d,&a);
printf(%d\n",a);
2)*:跳过相应数据不作处理——%*d忽略一个数字,%c忽略一个字符
int a,b;
a = b = -1; //连续赋值
scanf("%d%*d%d",&a,&b);
printf("%d,%d",a,b);
int a, b, c;
scanf("%d%*c%d%*c%d", &a, &b, &c);
printf("%d, %d,%d\n", a, b, c);
3)1或h:读入长整型、双精度或短整型数据
4)关于“\n”的使用问题:尽量不要使用,如果不小心使用,则可通过下面两种方法解决
a.输入值后,随便输入一个内容
b.\n要原样输入
3、scanf函数原理
如果输入缓冲区的内容不为空,scanf会一直从缓冲区中获取,而不要求再次输入