嵌入式系统学习Day4(C语言中的输入与输出)
1. 输入 --->[内存]--->输出2. c语言本身 没有输入输出printf基于C语言实现的函数3. c函数库标准输入输出库stdio4.学习 标准输入输出库提供相关函数。
前言:
1. 输入 --->[内存]--->输出
2. c语言本身 没有输入输出
printf 基于C语言实现的函数
3. c函数库
标准输入输出库 stdio
4.学习 标准输入输出库 提供相关函数
getchar / putchar
scanf / printf
gets / puts
字符数据的输入输出
1.putchar 函数
putchar 函数(字符输出函数)的作用是向终端输出一个字符。其一般形式为 putchar(c)
它输出字符变量c 的值,c可以是字符型变量或整型变量。
具体实现:
也可以输出其他转义字符,例如:
putchar('\101')
putchar(1\ 11)
putchar('\ 0151)
2 getchar 函数
getchar 函数(字符输入函数)的作用是从终端(或系统隐含指定的输入设备)输入一 个字符。 getchar 函数没有参数,其一般形式为 getchar() 。函数的值就是从输入设备得到的字符。
int getchar(void); //函数原型
具体实现:(输入hello打印出HELLO)
功能:从键盘获得一个字符
参数:void ---空 -- 不需要传递实际参数
返回值:
成功 返回读到的 字符 对应的ASCII值
失败 EOF //end of file (-1)
3.printf 函数
printf 函数(格式输出函数)的作用是向终端(或系统隐含 指定的输出设备)输出若干个任意类型的数据(putchar 只能输出字符,而且只能是一个字 符,而 printf 可以输出多个数据,且为任意类型)。printf 的一般格式为 printf( 格式控制,输出表列)
功能:
格式化输出
参数:
@format //参数得是一个 "字符串"
@... //可变参数
printf("hello world!\n");
printf("a = %d\n",a);
printf("ret = %c:%d\n",ret,ret);
具体实现:

返回值:
成功 返回输出的字符个数
失败 负值 (-1)
printf("格式控制字符串",输出列表)
//"格式控制字符串"
普通字符: 不是占位符的其他字符 都是普通字符 ---- 原样输出
占位符 : %d %u ---占位符 会被替换为 输出列表中 对应的数据
占位符:
整型
%d --- 表示将数据 转换为 有符号十进制形式 //int
%u --- 表示将数据 转换为 无符号十进制形式
%x --- 表示将数据 转换为 十六进制形式
%X --- 表示将数据 转换为 十六进制形式 十六进制中出现的 字母的这些值 输出成大写形式
%o --- 表示将数据 转换为 八进制形式
浮点型
%f --- 表示将数据 转换为 十进制形式小数 ,默认保留6位小数
%e --- 表示将数据 转换为 科学计数法形式小数
%E 输出结果中的e 大写
%g --- 以一种更简洁的方式来输出,同时不会输出无效的0
字符型
%c --- 表示将数据 转换为 对应的字符形式
%s --- 字符串
"hello" //字符串常量
//""
//多个字符组合成的
//结束标志 '\0'
%[辅助控制符]d
#
%#x //十六进制的 前缀0x打印出来
%#o //八进制的 前缀0打印出来
m.n
m 是个数字 表示要输出的数据的宽度
%3d //表示指定输出结果的宽度为3列字符的宽度
如果 m <= 数据实际的宽度 此时 以实际数据的宽度来输出
如果 m > 数据实际的宽度 此时 以m的宽度来输出,此时在前面默认补空格
注意:
1. 默认输出效果 是右对齐
左对齐 -m
- 表示是左对齐 此时空格补在后面
2. 小数点也算一列宽度
补0 //只能用在右对齐
%08d
.n n也是个数字
只用于小数 和 字符串
%.nf //表示保留n位小数
%.ns //表示保留前n位字符
%ld //l --- long
%lld //ll --- long long
%hd // half --- 一半 2字节
%hhd // 1字节
%% //对应输出一个 %

4.scanf 函数
scanf("格式控制字符串",地址列表)
int a;
scanf("a=%d",&a);
"格式控制字符串"
普通字符: 不是占位符的其他字符 都是普通字符 ---- 原样输入
占位符 : %d %u ---占位符 会将输入进的数据,转换为指定的格式
具体实现:
注意:
1. 地址列表 对应的一定是 有效的空间的地址
2. 占位符的作用,是将输入的数据转换为指定的格式,存放到对应的存储空间上
3. 注意 占位符 与 对应的额数据类型 ---保持一致
%f --- float
%lf --- double
%Lf --- long double
%d %u %x %X %o 默认 匹配 int 这种大小的数据
short --- %hd
long --- %ld
long long --- %lld
4.多个数据输入时,数据之间可以用 空白符 分隔
空白符 (\n tab 空格)
5.占位符和地址列表的参数 要一一对应
Segmentation fault (core dumped) //原因: 是因为访问到了不能访问的空间
段 错误
6.scanf中出现了空白符 ---效果是,匹配任意多个空白符
scanf("%d\n",&a);
7. scanf工作原理
-> 12.34\n
=>[12.34\n] //输入缓冲区
|
scanf("%d",&a)
|
开始从输入缓冲区逐个字符匹配
[.34\n]
scanf("%d",&a);
%d --- 识别匹配有效(合法)字符 '0'~'9'
[]
scanf("%d\n",&a);
8.scanf输入结束的情况
(1).遇到了非法字符
(2).遇到空白符结束
123\n
scanf("%d",&a);
(3).达到指定的宽度结束
scanf("%3d",&a);
9.辅助控制符
%ld
%lld
%3d
10.%c 可以匹配 空白符
11.匹配空白符
scanf(" %d",&a);
scanf("%*c%c",&c); //%*c 匹配一个 字符 ,但是并不保存
gechar(); //清理缓存
[a\n]
scanf("%d",&a);
scanf("%c",&c);
占位符:
整型
%d --- 表示将数据 转换为 有符号十进制形式 //int
%u --- 表示将数据 转换为 无符号十进制形式
%x --- 表示将数据 转换为 十六进制形式
%X --- 表示将数据 转换为 十六进制形式 十六进制中出现的 字母的这些值 输出成大写形式
%o --- 表示将数据 转换为 八进制形式
浮点型
%f --- 表示将数据 转换为 十进制形式小数 ,默认保留6位小数
%e --- 表示将数据 转换为 科学计数法形式小数
%E 输出结果中的e 大写
%g --- 以一种更简洁的方式来输出,同时不会输出无效的0
字符型
%c --- 表示将数据 转换为 对应的字符形式
%s --- 字符串
"hello" //字符串常量
//""
//多个字符组合成的
//结束标志 '\0'
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐


所有评论(0)