C语言本身并不提供输入输出功能,使用的是C语言函数库的输入输出函数,输入输出类型主要有以下几组:
getchar / putchar ------ 操作一个字符
scanf / printf ------ 格式化的函数
get / put ------ 操作一个字符串
本文主要介绍前两种。
一、getchar() 和 putchar()
getchar
函数原型:int getchar (void) ------ 从键盘获取一个字符
参数:void ------ 表示为空,使用时不需要给值
返回值:返回值表示获取到的字符的ASSCII码值
eg:
int ret;
ret = getchar();
putchar
函数原型:int putchar(int c); ------ 输出一个字符
参数:@ c ------ 表示要输出的字符
返回值:如果成功返回输出了的字符的ASCII码值,失败返回 -1
二、printf()
函数原型:int printf(const char *format, ...) ----- ... 表示可变参数
简化---> printf(“格式控制字符串”,输出参数序列);
1. 格式控制字符串
(1)普通字符 ------- 直接匹配输出
(2)占位符 ------- 匹配后面的输出参数
①整型
%d --- 转换为有符号十进制形式
%u --- 转换为无符号十进制形式
%o --- 转换为八进制形式
%x --- 转换为十六进制形式
%X --- 转换为十六进制形式 a b c d e f以大写形式输出 ,0X 的x也会是大写
②浮点型
%f --- 转换为 十进制形式的小数,输出时默认保留6位小数,不足6位 补0
%e --- 转换为 科学计数法的形式 ,%E 也可以
%g --- 以 一种 更简洁的方式输出,同时不会输出无意义的0
③字符型
%c --- 转换为字符形式输出
%s --- 转换为字符串形式输出
④补充:辅助控制符
% [辅助控制符] d
# ---- %#x // 打印出16进制的前缀
%#o // 打印出8进制的前缀
m ---- 数字 表示要输出的数据的宽度
如果数据本身的宽度 > m 此时按照实际宽度输出
如果数据本身的宽度 < m 此时按照m宽度输出,空出来的位置 填空格 默认右对齐
-m ---- 按指定宽度输出 ,左对齐 (负号表示左对齐)
0m ---- 多出来的位置 可以填充0,注意左对齐时不填充0
.n ---- n数字
%f --- %.2f //表示保留2位小数
%e --- %.2e //表示保留2位小数的科学计数法
%s --- 表示保留前n个字符
%ld ---- long
%lld ---- long long //整型
%hd ---- half
%hhd ---- half half
注意:占位符与输出参数的关系是一一对应
三、scanf()
功能:从键盘获得数据,转换成相应格式
返回值:匹配到的值的个数
简化格式:scanf(“格式控制字符串”,地址列表);
1. 格式控制字符串
(1)普通字符 ---- 运行时程序时需原样输入
(2)占位符 ---- 与printf()中的一样
辅助控制符:
%md ---- 数据宽度 ---输入宽度
注:输入的时候 ,这里要做到精确匹配
%f --- float
%lf --- double
%Lf --- long double
%ld --- long
%lld --- long long
注意:
1. scanf 格式控制字符串中 尽量不出现 普通字符,一般只写 占位符
2. scanf 的地址列表中,一定是有效的地址
error:segmentation fault (core dumped) ---- 段错误
原因:访问到了 不能访问的内存空间
3. scanf 输入结束的条件(匹配结束的条件)
%d
输入:[12a3]
(1)遇到非法字符 匹配结束
(2)遇到空白符---- 空格 回车 tab
(3)超过指定的宽度 结束
scanf("%3d",&a);
4. scanf的格式控制字符串中,如果出现 空白符 ,表示匹配任意多个空白符
因此:scanf(“.....\n”)这样的格式要避免使用!
%*c 表示 匹配一个数据项 但是并不把这个数据给到任何一个变量中
注意输入字符时,格式要小心,%c可以表示键盘上的任意一个键