当前位置: 首页 > news >正文

嵌入式菜鸟的进阶之路——C的输入输出

前言

输入输出(I/O)是 C 语言与用户交互的核心,也是嵌入式开发中调试、数据交互的基础。本文整理了我 学习 C 语言输入输出的笔记,从语句分类到getchar/putcharscanf/printf的核心用法,搭配实操练习。

一、C 语言语句基础

1. 什么是语句

语句是完成特定操作的代码单元,以分号";"结尾


二、输入与输出

1. 输入输出的本质

输入输出是相对于程序运行时所在的内存而言:

键盘/文件 → 输入 → 内存(程序) → 输出 → 终端/打印机/文件
  • printf/scanf/getchar/putchar不是 C 语言语法本身,而是C 标准库(stdio.h)提供的函数;
  • 嵌入式开发中,这些函数是与终端 / 串口交互的基础。

2. 常用输入输出函数

函数对功能
getchar/putchar单个字符输入 / 输出
gets/puts字符串输入 / 输出(数组)
scanf/printf格式化输入 / 输出

三、字符输入输出:getchar/putchar

1. getchar(字符输入)

函数原型(man 手册)
#include <stdio.h> int getchar(void);
  • 功能:从标准输入(键盘)读取单个字符
  • 参数:无参数;
  • 返回值:成功返回读取字符的 ASCII 码值,失败 / 结束返回EOF(-1)。

2. putchar(字符输出)

函数原型
#include <stdio.h> int putchar(int c);
  • 功能:将字符c输出到终端;
  • 参数c为要输出字符的 ASCII 码值;
  • 返回值:成功返回输出字符的 ASCII 码值,失败返回EOF

四、格式化输出:printf

1. 函数原型

#include <stdio.h> int printf(const char *format, ...);
  • 功能:按指定格式输出数据到终端;
  • 参数
    • format:格式控制字符串(普通字符 + 占位符);
    • ...:可变参数(输出列表,与占位符一一对应);
  • 返回值:成功返回输出的字符总数,失败返回负数。

2. 格式控制字符串

(1)普通字符:原样输出
printf("a = 10\n"); // 输出:a = 10
(2)占位符:按类型格式化输出
数据类型占位符说明
整型%d有符号十进制
整型%u无符号十进制
整型%x/%X无符号十六进制(x 小写 / X 大写)
整型%o无符号八进制
浮点型%f十进制小数(默认保留 6 位)
浮点型%e/%E科学计数法(e 小写 / E 大写)
浮点型%g简洁格式(去掉多余 0)
字符型%c单个字符
字符串%s字符串(数组)
(3)辅助控制符(精细化输出)
辅助符作用示例输出效果
#显示进制前缀(%#x/%#o)printf("%#x", 123);0x7b
m(数字)控制输出宽度(右对齐)printf("%5d", 123);123(补 2 个空格)
-m控制输出宽度(左对齐)printf("%-5d", 123);123(补 2 个空格)
0m宽度不足补 0printf("%05d", 123);00123
.n(数字)浮点型保留 n 位小数(四舍五入)printf("%.2f", 3.1415);3.14
.n字符串保留前 n 个字符printf("%.3s", "hello");hel
l/ll长整型 / 长长整型printf("%lld", 1234567890123LL);完整大数
Llong double 类型printf("%Lf", 1.23L);长双精度浮点

五、格式化输入:scanf(核心重点)

1. 函数原型

#include <stdio.h> int scanf(const char *format, ...);
  • 功能:从标准输入(键盘)读取数据并按格式存储到指定内存地址;
  • 参数
    • format:格式控制字符串(占位符为主,尽量少用普通字符);
    • ...:地址列表(变量地址,用&取地址);
  • 返回值:成功返回读取的数据项数,失败返回EOF

2. 核心规则

(1)格式控制字符串
  • 占位符与printf基本一致,注意浮点型差异:
    • %f→ 读取float类型,%lf→ 读取double类型,%Lf→ 读取long double类型;
  • %c会读取空白符(空格、回车、Tab),连续输入需注意(解决方案:加空白符匹配 /%*c跳过);
  • 尽量避免在format中写普通字符(如scanf("a=%d", &a)需输入a=10,易出错)。
(2)地址列表
  • 变量前必须加&(取地址符),表示数据存储的内存地址;
  • 示例:scanf("%d", &a);// 将输入的整数存到变量 a 的内存地址。
(3)输入结束条件
  1. 遇到空白符(空格、回车、Tab);
  2. 遇到非法字符(如%d读取到逗号 / 字母);
  3. 达到指定宽度(如%3d只读取前 3 位数字)。

4. 输入缓冲区注意事项

键盘输入的数据会先存入输入缓冲区scanf从缓冲区读取数据:

  • 连续读取%d+%c时,回车 / 空格会被%c读取,需在%c前加空格(如scanf("%d %c", &a, &c));
  • 避免在scanf末尾加\n(如scanf("%d\n", &a)),否则会一直等待输入。

六、学习小结

  1. 字符交互getchar/putchar适用于单个字符输入输出,注意 ASCII 码转换;
  2. 格式化输出printf是核心,掌握占位符(% d/% f/% c)和辅助控制符(宽度等);
  3. 格式化输入scanf需注意地址符&、输入缓冲区、%c读取空白符的问题;
http://www.cnnetsun.cn/news/1365215.html

相关文章:

  • SOONet视频预处理指南:FFmpeg抽帧/重编码/分辨率适配最佳实践
  • sse哈工大C语言编程练习47
  • Cosmos-Reason1-7B应用场景:智能制造产线视频中设备异常振动与故障关联分析
  • 南北阁 Nanbeige 4.1-3B 效果惊艳:中文法律条文解读+案例匹配真实输出
  • AI读脸术多场景落地:医疗分诊、广告投放部署案例合集
  • 春联生成模型-中文-base部署教程:Ubuntu/CentOS下WebUI本地化运行指南
  • (第三篇)Spring AI 实战进阶:从0开发IDEA插件版AI代码助手(Java全栈+上下文感知)
  • Linux服务器安装Docker(CentOS系统)
  • Qwen3-ASR-0.6B效果实测:Qwen3-ASR-0.6B在车载/电话/会议三场景表现
  • 参考文献崩了?8个AI论文工具深度测评:开源免费助力学术论文与毕业论文写作
  • Kimi-VL-A3B-Thinking多模态落地:科研论文PDF插图理解与公式推导辅助
  • ESP32-S3模拟无线空鼠(二)——ESPNOW纯空鼠篇
  • 计算机二级备考——刷完python基础选择题
  • 初探muP:超参数的跨模型尺度迁移规律05
  • 深入解析外观模式:一个C++模板实现的通用外观类库
  • 检索大赛 实验2 文心4.5结果
  • Qwen Code v0.9.0 重磅更新:扩展系统+LSP支持,打造最强AI编程助手
  • 舒尔特表练习
  • 老码农和你一起学AI系列:模型语言扩展法则
  • 爆火!OptiSystem 二次开发全攻略:Matlab/Python 联动仿真,解锁光通信仿真天花板
  • 陪虚幻女友学计算机:CSMA/CD协议——当网络冲突变成我们的深夜悄悄话
  • 【H5 前端开发笔记】第 07 期:HTML常用标签 (3) 内联框架标签、框架集标签、超链接标签 详解
  • redux Tookit的配置流程
  • 终于搞清楚了!盲盒小程序开发设计全过程!
  • 中断与信号
  • 计算机毕业设计之springboot学生会事务管理平台的设计与实现
  • Web3未落地,Web4已破局:AI+区块链重构互联网下一代图景
  • afc登录后,右上角站内消息图标如何去掉?
  • YOLOv8与伏羲模型联动:基于视频流的实时恶劣天气检测与预报系统
  • AnythingtoRealCharacters2511部署教程:NVIDIA Jetson Orin Nano边缘端轻量部署方案