scanf 与printf注解
(一)printf
用法
其作用是将参数文本输出到屏幕,由print(打印)以及 f (format-格式化)组成,作为库函数需要对应的头文件 <stdio.h>
printf() 打印时不会自动换行,运行结束后,光标就停留在输出结束的地⽅
为了达到换行的目的我们可以使用转义字符\n
占位符
printf() 可以在输出文本中指定占位符,如下
变量a取代了%d,而%d就是占位符,会被指定变量或值代替
占位符的第⼀个字符为百分号 %, 第⼆个字符为占位符的类型(如%d,被整形变量代替)
其次介绍%s,%c
%s 可带入⼀个字符串,这个字符串需要用“ ”给包括
%c可带入一个字符,字符需要用' '包括
同样输出文本可以包含多个占位符
这些占位符与后面的参数一一对应,如果有 n 个占位符,printf() 的参数就应该有 n + 1 个
如果参数个数少于对应的占位符, printf() 的参数就应该有 printf() 可能会输出内存中的任意值
占位符列举
%a :十六进制浮点数,字母输出为小写
%A :十六进制浮点数,字母输出为大写
%c :字符 char
%d :十进制整数。int
%e :使用科学计数法的浮点数,指数部分的 e 为小写。
%E :使用科学计数法的浮点数,指数部分的 E 为大写。
%i :整数,基本等同于 %d
%f :小数(包含 float 类型和 double 类型)float--%f double--%lf
%g :6个有效数字的浮点数。整数部分⼀旦超过6位,就会⾃动转为科学计数法,指数部分的 e 为小写
%G :等同于 %g ,唯⼀的区别是指数部分的 E 为大写
%hd :十进制shortint类型
%ho :八进制shortint类型
%hx :十六进制shortint类型
%hu :unsignedshortint类型
%ld :十进制longint类型
%lo :八进制longint类型
%lx :十六进制longint类型
%lu :unsignedlongint类型
%lld :十进制longlongint类型
%llo :八进制longlongint类型
%llx :十六进制longlongint类型
%llu :unsignedlonglongint类型
%Le :科学计数法表⽰的longdouble类型浮点数
%Lf :longdouble类型浮点数
%n :已输出的字符串数量。该占位符本⾝不输出,只将值存储在指定变量之中
%o :八进制整数
%p :指针(用来打印地址)
%s :字符串
%u :无符号整数(unsignedint)
%x :十六进制整数
%zd : size_t 类型
%% :输出⼀个百分号
重点我标记了一下
限定宽度
printf() 允许限定占位符的最小宽度
对整数
%5d 表示这个占位符的宽度至少为5位,如果不满5位,对应的值的前面会添加空格
输出的值默认是右对齐,如上图举例;如果改成左对齐,需要在占位符的 % 的后面添加 - 号
如下
对小数
限定小数宽度
在打印小数中,下面限定符会限制所有数字的最小显示宽度,小数点后空白填充0
限定小数位数
如果希望小数点后面只保留两位,占位符可以写 成 %.2f
若保留小数点后n位,可写成%.nf
宽度与位数,二者可以同时使用
意为小数点后3位,总宽度为7位(包含小数点)
对字符串
%s 占位符用来输出字符串,默认是全部输出,也可以用%n s指定输出长度,其中n 代表⼀个数字,表示所要输出的长度,空格也会计入在内
*
无论对整数,小数,还是字符串,其限定值都可用 * 代替
注:默认情况下, printf() 不对正数显示 + 号,只对负数显示 - 号。如果想让正数也输出 + 号,可 以在占位符的 % 后面加⼀个 +
(二)scanf
有了变量,我们需要给变量输入值就可以使用scanf函数,如果需要将变量的值输出在屏幕上的时候,可以使用 prinf 函数
scanf() 函数用于读取键盘输入,程序运行到scanf()函数时会停下来,等待用户在键盘输入
用户输⼊数据、按下回车键后, scanf() 就会处理用户的输⼊,将其存入变量
其头文件同样是<stdio.h> ,占位符用法与printf相似,它的第⼀个参数是⼀个格式字符串,格式字符串里面有多少个占位符,就有多少个变量
变量前面必须加上&运算符(指针变量除外),因为scanf传递的不是值,而是地址,即让变量 a 的地址指向用户输入的值
scanf() 处理数值占位符时,会自动过滤空白字符,包括空格、制表符、换行符等,即便使用回车 键,将输入分成几行,也不影响
scanf() 处理用户输⼊的原理是,用户的输入先放入缓存,等到按下回车键后,按照占位符对缓存 进行解读
%d 占位符会忽略起首的空格,从 - 处开始获取数据,到-2停下,. 不属于整数的有效字符,%d只读到-2,第⼆次调用时,从上⼀次停止解读的地方,继续往下读取, 读到不属于浮点数的有效字符时,会停止
scanf 的返回值
scanf() 的返回值是⼀个整数,表示成功读取的变量个数
如果没有读取任何项,或者匹配失败,则返回 0
如果在成功读取任何数据之前,发⽣了读取错误或者遇到读取到文件结尾,则返回常量EOF(-1)
EOF-endoffile 文件结束标志
r为scanf返回值,若输入错误如下,其返回值为2
scanf() 常⽤的占位符与 printf() 的占位符基本⼀致
%c 不忽略空白字符,总是返回当前第⼀个字符,无论该字符是否为空格如果要强制跳过字符前的空⽩字符,可在 %c 前加上⼀个空格,表示跳过零个或多个空白字符
而占位符 %s ,它其实不能简单地等同于字符串。它的规则是,从当前第⼀个非空白字符开始读起,直到遇到空白字符(即空格、换行符、制表符等)为止
%s 不会包含空白字符,所以无法用来读取多个单词,故scanf() 不适合读取可能包含空格的字符串
符,scanf() 遇到 %s 占位会在字符串变量末尾存储⼀个空字符 \0
scanf() 将字符串读⼊字符数组时,不会检测字符串是否超过了数组长度,当储存字符串时, 很可能会超过数组的边界, 会出现问题, 所以使用%s时,指定读⼊字符串的最长长度,即写成 %n s
赋值忽略符
若用户的输入可能不符合预定的格式, scanf() 提供了⼀个赋值忽略符 * , 只要把 * 加在任何占位符的百分号后⾯,该占位符就不会返回值,解析后将被丢弃
标签:字符,1.2,输出,scanf,占位,一直,printf,字符串 From: https://blog.csdn.net/W260909_7418/article/details/143080119