
前言输入输出I/O是 C 语言与用户交互的核心也是嵌入式开发中调试、数据交互的基础。本文整理了我 学习 C 语言输入输出的笔记从语句分类到getchar/putchar、scanf/printf的核心用法搭配实操练习。一、C 语言语句基础1. 什么是语句语句是完成特定操作的代码单元以分号;结尾。二、输入与输出1. 输入输出的本质输入输出是相对于程序运行时所在的内存而言键盘/文件 → 输入 → 内存程序 → 输出 → 终端/打印机/文件printf/scanf/getchar/putchar不是 C 语言语法本身而是C 标准库stdio.h提供的函数嵌入式开发中这些函数是与终端 / 串口交互的基础。2. 常用输入输出函数函数对功能getchar/putchar单个字符输入 / 输出gets/puts字符串输入 / 输出数组scanf/printf格式化输入 / 输出三、字符输入输出getchar/putchar1. 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。四、格式化输出printf1. 函数原型#include stdio.h int printf(const char *format, ...);功能按指定格式输出数据到终端参数format格式控制字符串普通字符 占位符...可变参数输出列表与占位符一一对应返回值成功返回输出的字符总数失败返回负数。2. 格式控制字符串1普通字符原样输出printf(a 10\n); // 输出a 102占位符按类型格式化输出数据类型占位符说明整型%d有符号十进制整型%u无符号十进制整型%x/%X无符号十六进制x 小写 / X 大写整型%o无符号八进制浮点型%f十进制小数默认保留 6 位浮点型%e/%E科学计数法e 小写 / E 大写浮点型%g简洁格式去掉多余 0字符型%c单个字符字符串%s字符串数组3辅助控制符精细化输出辅助符作用示例输出效果#显示进制前缀%#x/%#oprintf(%#x, 123);0x7bm数字控制输出宽度右对齐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);hell/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)需输入a10易出错。2地址列表变量前必须加取地址符表示数据存储的内存地址示例scanf(%d, a);// 将输入的整数存到变量 a 的内存地址。3输入结束条件遇到空白符空格、回车、Tab遇到非法字符如%d读取到逗号 / 字母达到指定宽度如%3d只读取前 3 位数字。4. 输入缓冲区注意事项键盘输入的数据会先存入输入缓冲区scanf从缓冲区读取数据连续读取%d%c时回车 / 空格会被%c读取需在%c前加空格如scanf(%d %c, a, c)避免在scanf末尾加\n如scanf(%d\n, a)否则会一直等待输入。六、学习小结字符交互getchar/putchar适用于单个字符输入输出注意 ASCII 码转换格式化输出printf是核心掌握占位符% d/% f/% c和辅助控制符宽度等格式化输入scanf需注意地址符、输入缓冲区、%c读取空白符的问题