目录
1.输入输出
概念:输入 --->计算机(内存)--->输出
2.输入输出功能
(1)C语言本身并不提供输入输出功能,使用的是C语言函数库中的“标准输入输出函数”
(2)C语言函数库提供的输入输出函数
getchar/putcahr // 操作一个字符
gets/puts // 操作一个字符串
scanf/printf // 格式化的函数
(3)需要加上<stdio.h>头文件
3.函数
getchar
getchar(void) // 函数原型
功能:从键盘上获取一个字符
参数:void ---表示为空,使用时不需要给实参
返回值:获取到的字符的ASCII码
putcahr
putchar(int c) //函数原型
功能:c --- 表示要输出的字符
返回值:成功:输出的字符的ASCII码
失败:-1
printf
printf() //格式化输出函数
int printf(const char * format,···); //函数原型
··· //表示可变参数
printf("格式控制字符串",输出参数列表);
其中格式控制字符串分为两种,普通字符和占位符。
最经典的普通字符就是printf("Hello World");中的Hello World,遵循原样输出的规则
而占位符是为了匹配后面输出的参数
整形的占位符
%d —— 将输出参数转换为有符号十进制
%u —— 将输出参数转换为无符号十进制
%o —— 将输出参数转换为八进制形式
%x —— 将输出参数转换为十六进制形式,a,b,c,d,e,f小写
%X —— 将输出参数转换为十六进制形式,a,b,c,d,e,f大写
浮点型
%f —— 将输出参数转换为十进制的小数,输出时默认保留6位小数,不足6位的补0
%e —— 将输出参数转换为科学计数法形式
%g —— 将输出参数以一种更简洁的方式输出,同时不会输出无意义的0
字符型
%c —— 将输出参数转换为字符形式输出
%s —— 将输出参数转换为字符串形式输出
在占位符%的后面可以加入辅助控制符
辅助控制符有
# —— %#o //打印出八进制的前缀
%#x //打印出十六进制的前缀
m —— 任意数字,表示要输出数据的宽度,如果数据本身的宽度>m此时按照实际宽度输出,如果数据本身的宽度<m则按照m的宽度输出,空出的位置填空格,默认右对齐
printf("%8d",1234);
输出结果为
____1234前面4位为空
-m —— 表示左对齐
printf("%8d",1234);
输出结果为
1234____后面4位为空
0m —— 在多出的位置填0,只在右对齐时有效
printf("%08d",1234);
输出结果为
00001234前面4位为空
.n —— n为数字
%.2f 保留两位数字 %.2s 保留前两个字符 只有这两个占位符能用‘.’这个辅助控制符
l —— long型需加
ll —— longlong型需加
h —— half // hd 整形的一半,对应输出类型为short
hh —— halfhalf
注意:占位符应与输出参数一一对应
scanf
scanf //格式化输入函数
scanf("格式控制字符串",地址列表)
(1)格式控制字符串 //与printf中的一样
a.普通字符 —— 原样输入
b.占位符 —— 将键盘输入的数据,转换成指定的格式
在scanf中占位符输入的时候要与输入参数的类型做到精确匹配
%f —— float
%lf —— double
%Lf —— long double
%d —— int
%ld —— long
%lld —— long long
(2)地址列表
在输入参数时要在参数前加取地址符号&
scanf中的注意事项:1.scanf格式控制字符串中,尽量不用普通字符,一般只写占位符。2.scanf的地址列表中,一定是有效列表,否则可能出现Segmentation fault (core dumped) 段错误 --- 产生原因:访问到了 不能访问的内存空间 。3.scanf输入结束的条件(匹配结束的条件)(a)遇到非法字符,如输入123a45到%d中,只能输入123,a是不属于整形类型非法字符,所以输入到a结束。(b)遇到空白符,匹配结束。空白符有空格,回车和tab。(c)超过指定的宽度,匹配结束。如%5d宽度为5,输入123456的结果只有12345.
关于scanf的空白符匹配,scanf的格式控制字符串中,如果出现空白符,表示匹配任意多个空白符,%*c表示一个数据项,但是并不把这个数据给到任何一个变量中。