一.printf
1.基本用法
printf()的作用是将参数文本输出的屏幕。如下;
2.占位符
printf()可以在输出文本中指定占位符 ,“占位符”,也就是这个位置可以用其他值代入。
如:
那么图中的%d,就是占位符,18就是代入的值。占位符第一个字符都是%,第二个字符表示占位符的类型,图中%d为整型,所以输入是整数。不同的占位符,就要输入对应的值。
printf()也可以使用多个占位符
图中有2个占位符为%s,%d。那么这2个占位符就对应了后边的2个参数,%s为字符串,%d为整型,占位符与参数是一 一对应的。
3.占位符列举
• %a :⼗六进制浮点数,字⺟输出为⼩写。
• %A :⼗六进制浮点数,字⺟输出为⼤写。
• %c :字符。 • %d :⼗进制整数。
• %e :使⽤科学计数法的浮点数,指数部分的 e 为⼩写。
• %E :使⽤科学计数法的浮点数,指数部分的 E 为⼤写。
• %i :整数,基本等同于 %d 。
• %f :⼩数(包含 float 类型和 double 类型)。
• %g :6个有效数字的浮点数。整数部分⼀旦超过6位,就会⾃动转为科学计数法,指数部分的 e 为⼩写。
• %G :等同于 %g ,唯⼀的区别是指数部分的 E 为⼤写。
• %hd :⼗进制 short int 类型。
• %ho :⼋进制 short int 类型。
• %hx :⼗六进制 short int 类型。
• %hu :unsigned short int 类型。
• %ld :⼗进制 long int 类型。
• %lo :⼋进制 long int 类型。
• %lx :⼗六进制 long int 类型。
• %lu :unsigned long int 类型。
• %lld :⼗进制 long long int 类型。
• %llo :⼋进制 long long int 类型。
• %llx :⼗六进制 long long int 类型。
• %llu :unsigned long long int 类型。
• %Le :科学计数法表⽰的 long double 类型浮点数。
• %Lf :long double 类型浮点数。
• %n :已输出的字符串数量。该占位符本⾝不输出,只将值存储在指定变量之中。
• %o :⼋进制整数。
• %p :指针。
• %s :字符串。
• %u :⽆符号整数(unsigned int)。
• %x :⼗六进制整数。
• %zd : size_t 类型。
• %% :输出⼀个百分号。
4.输出格式
printf()可以定制占位符的输出格式
1.限定宽度
printf()限定宽度是最小宽度,如下
图中限度最小宽度为%6d,所以宽度最小为6,那么123不满足,就会在值的前面添加空格补齐,输出的值默认是右对齐,那么如果想左对齐,只需要在%后面加入(-)负号,如%-6d 。
如果参数超过了限定宽度是没有问题的,因为限定宽度是最小宽度,如下图
如下图,%12f表示输出的浮点数最少要占12位,那么精度默认小数点后为6位,剩余的就会在1的前边补齐。
2.限定小数位
输出小数的时候,我们可以根据自己的想法来限定小数位。那么下图中我们想让它输出小数点后2位只需要在%后面加入小数点以及限定的位数即可。
那么会不会四舍五入呢,其实是会的如下图
3.限定宽度和限定小数的结合使用
这2个是可以结合使用的如下图,最小宽度为10,小数点后限制3位,剩余的右边补齐
我们还可以更加灵活一点,最小宽度,限定小数都是可以用*号来代替的,通过printf()的参数传入,最小宽度为10,限定小数位3,同等与%10.3f 。如下:
4.输出部分的字符
在%号后面加入小数点以及限定的位数不仅可以用在浮点数,也可以用在字符串。如下,我们限定的位数为5位,所以输出为”zhang“ 。
小结:大家可以自行灵活的去实践
二.scanf
那么我们有了printf()输出,当然也有scanf()输入了。
1.基本用法
用于读取用户的键盘输入 ,当程序运行到该语句,会停下来,等待用户在键盘的输入,用户输入完,按下回车键,scanf()就会处理用户的输入,并存入变量,定义的头文件为stdio.h
scanf()与printf()一样都是有占位符的,如下图, %d 就是⼀个占位符, % 是占位符的标志, d 表⽰整数。第⼆个参数 &i 表示,将用户从键盘输⼊的整数存⼊变量 i ,变量前边必须加入&运算符,因为scanf()传递的是地址,将变量i的地址指向用户的输入的值。
例子,那么前边2个%d就表示用户输入的是整数,后边2个%f表示用户输入浮点数。在这里因为我使用的是vs2022,所以scanf( )要加入下划线s ,或者包含,#define_CRT_SECURE_NO_WARNINGS ,这样才不会报错。
那么scanf()处理数值占位符,会自动过滤空白字符,包括空格、制表符、换行符等。
什么意思呢?如下。键盘等待着我输入,我可以输入一行然后回车再接着输入下一行。
注意点下图:
图中,读取是对应匹配的,如%d占位符,那么读取到整数18就结束了,然后%f占位符从小数点位开始读取就为0.3,然后小数点默认精度为6位,0.300000 , 所以输出18 0.300000。
2.scanf返回值
scanf返回值,返回的是一个整数,表示成功读取的数量个数 。
如图,成功读取了a,b,c。返回值为3
如果没有读取任何的数,或者说读取失败就会返回0,在vs环境中按键Ctrl+z就是提前结束。
如果在读取之前,发生了读取错误,会返回常量EOF(-1)
3.占位符列表
• %c :字符。
• %d :整数。
• %f : float 类型浮点数。
• %lf : double 类型浮点数。
• %Lf : long double 类型浮点数。
• %s :字符串。
• %[] :在⽅括号中指定⼀组匹配的字符(⽐如 %[0-9] ),遇到不在集合之中的字符,匹配将会 停⽌。
值得注意的是,除了%c以外,其他的占位符都会自动忽略起首的空白字符。如,%d可以忽略掉起首的空白字符
但是,如果是%c就不可以 ,因为在读取的时候空格也是字符。
如果要跳过空白字符,可以在%c前边加一个空格
4.赋值忽略符
如我们输入日期
但是,当我们不符合规定输入
scanf()解析数据会失败,为了避免这一情况,scanf()提供了赋值忽略符,为*,只要把*加在任何占位符%后边,该占位符就不会返回值,只对它进行解析然后丢弃,如%*c表示,读取后就丢弃,不用返回。
三.结尾
感谢大家的阅读! ! !