嵌入式解谜日志之C语言—输入输出
①int getchar(void); //函数原型功能:从键盘获得一个字符参数:void ---空 -- 不需要传递实际参数返回值:成功 返回读到的 字符 对应的ASCII值失败 EOF //end of file (-1)②putcharint putchar(int c);功能:输出一个字符参数: @c--- 要输出的字符//ascii码值返回值:成
输入输出:
1. 输入 --->[内存]--->输出
2. c语言本身 没有输入输出
printf 基于C语言实现的 函数
3. c函数库
标准输入输出库 stdio
i -- input
o -- output
4.学习 标准输入输出库 提供相关函数
getchar / putchar
scanf / printf
gets / puts (*) ---这一组
(1)getchar / putchar
①int getchar(void); //函数原型
功能: 从键盘获得一个字符
参数:void ---空 -- 不需要传递实际参数
返回值: 成功 返回读到的 字符 对应的ASCII值
失败 EOF //end of file (-1)
②putchar
int putchar(int c);
功能: 输出一个字符
参数: @c --- 要输出的字符 //ascii码值
返回值: 成功 返回值被输出的字符的 ascii码值
失败 EOF (-1)
(2)printf/scanf
①printf //格式化输出函数
int printf(const char *format, ...);
功能: 格式化输出
参数: @format //参数得是一个 "字符串"
@... //可变参数
printf("hello world!\n");
printf("a = %d\n",a);
printf("ret = %c:%d\n",ret,ret);
返回值: 成功 返回输出的字符个数
失败 负值 (-1)
printf("格式控制字符串",输出列表) //"格式控制字符串"
普通字符: 不是占位符的其他字符 都是普通字符 ---- 原样输出
占位符 : %d %u ---占位符 会被替换为 输出列表中 对应的数据
占位符:
(1)整型
%d --- 表示将数据 转换为 有符号十进制形式 //int
%u --- 表示将数据 转换为 无符号十进制形式
%x --- 表示将数据 转换为 十六进制形式
%X --- 表示将数据 转换为 十六进制形式 十六进制中出现的 字母的这些值 输出成大写形式
%o --- 表示将数据 转换为 八进制形式
(2)浮点型
%f --- 表示将数据 转换为 十进制形式小数 ,默认保留6位小数
%e --- 表示将数据 转换为 科学计数法形式小数
%E 输出结果中的e 大写
%g --- 以一种更简洁的方式来输出,同时不会输出无效的0
(3)字符型
%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字节
scanf(); //输入
int scanf(const char *format, ...);
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)