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

C语言格式化输入输出总结 (printf和scanf)

一、printf格式化输出

1. 整数格式化 (%d, %i, %u, %o, %x)

c复制代码

int num = 42;
// 以下为不同格式输出示例
printf("%d", num);      // 42 (十进制)
printf("%i", num);      // 42 (同%d)
printf("%u", num);      // 42 (无符号十进制)
printf("%o", num);      // 52 (八进制)
printf("%x", num);      // 2a (小写十六进制)
printf("%X", num);      // 2A (大写十六进制)
printf("%#x", num);     // 0x2a (带前缀)
printf("%05d", num);    // 00042 (补零)
printf("%-5d", num);    // "42   " (左对齐)
printf("%+d", num);     // +42 (显示符号)

2. 浮点数格式化 (%f, %e, %g)

c复制代码

double f = 3.1415926;
// 不同格式的浮点数输出示例
printf("%f", f);        // 3.141593 (默认6位)
printf("%.2f", f);      // 3.14 (保留2位)
printf("%8.3f", f);     // "   3.142" (总宽8)
printf("%e", f);        // 3.141593e+00 (科学计数)
printf("%.2E", f);      // 3.14E+00
printf("%g", f);        // 3.14159 (自动选择)
printf("%.3g", f);      // 3.14 (最多3位有效数字)

3. 字符和字符串

c复制代码

char c = 'A';
char s[] = "Hello";
// 字符与字符串输出示例
printf("%c", c);        // A
printf("%5c", c);       // "    A"
printf("%s", s);        // Hello
printf("%.3s", s);      // Hel (截断)
printf("%10s", s);      // "     Hello"
printf("%-10s", s);     // "Hello     "

二、scanf格式化输入

1. 基本输入格式

c复制代码

int a;
float b;
char c;
char str[20];// 基本类型输入示例
scanf("%d", &a);        // 读取整数
scanf("%f", &b);        // 读取浮点数
scanf("%c", &c);        // 读取单个字符
scanf("%s", str);       // 读取字符串(无空格)

2. 控制输入宽度

c复制代码

// 控制输入宽度示例
scanf("%5d", &a);       // 最多读取5位数字
scanf("%4f", &b);       // 最多读取4位浮点数
scanf("%10s", str);     // 最多读取10个字符

3. 跳过特定输入

c复制代码

int day, month, year;
// 跳过特定输入示例
scanf("%d/%d/%d", &day, &month, &year); // 输入12/05/2023
scanf("%d - %d - %d", &day, &month, &year); // 输入12 - 05 - 2023
scanf("%*s %d", &a);    // 跳过第一个字符串,读取第二个数字

4. 扫描集

c复制代码

char name[50];
// 扫描集示例
scanf("%[A - Za - z]", name);   // 只读取字母
scanf("%[^\n]", str);       // 读取整行(包括空格)

三、特殊格式控制

1. printf特殊格式

c复制代码

// printf特殊格式示例
printf("%p", &num);     // 输出指针地址
printf("%%");           // 输出%字符
printf("%*d", 5, 10);   // 宽度动态指定(5)

2. scanf特殊格式

c复制代码

int h, m, s;
// scanf特殊格式示例
scanf("%d:%d:%d", &h, &m, &s);  // 输入12:30:45
scanf("%[0 - 9]", str);           // 只读取数字
scanf("%*[ \t\n]%c", &c);       // 跳过空白字符

四、综合示例

1. printf示例

c复制代码

#include <stdio.h>
int main() {int id = 123;float score = 89.567;char grade = 'A';// 格式化输出示例printf("学号:%05d 成绩:%6.2f 等级:%c\n", id, score, grade);// 输出: 学号:00123 成绩: 89.57 等级:Areturn 0;
}

2. scanf示例

c复制代码

#include <stdio.h>
int main() {int year;char model[20];float price;printf("输入汽车信息(年份 型号 价格): ");scanf("%d %19s %f", &year, model, &price);// 格式化输出读取的信息printf("%d年款 %s 售价: %.2f万元\n", year, model, price);return 0;
}

五、格式说明符对比

说明符printf用途scanf用途
%d输出有符号十进制整数读取有符号十进制整数
%i同%d可读取十进制/八进制/十六进制
%u输出无符号十进制整数读取无符号十进制整数
%o输出八进制读取八进制
%x/%X输出十六进制读取十六进制
%f输出浮点数读取float
lf同%f (double)读取double
%e/%E科学计数法输出同%f
%g/%G自动选择%f或%e同%f
%c输出字符读取字符
%s输出字符串读取字符串(无空格)
%p输出指针地址
%[]扫描字符集合
%%输出%字符

六、注意事项

1. printf和scanf参数区别

  • printf传递变量值。
  • scanf传递变量地址(&)。

2. 缓冲区问题

c复制代码

int a; char c;
scanf("%d", &a);    // 输入后按回车
scanf("%c", &c);    // 会读取之前输入的回车
// 解决方法: scanf(" %c", &c); (添加空格)

3. 安全性

  • 使用scanf读取字符串时务必指定宽度:

c复制代码

char str[10];
scanf("%9s", str);  // 防止缓冲区溢出

4. 返回值

  • scanf返回成功读取的项目数。

c复制代码

if(scanf("%d %f", &a, &b)!= 2) {printf("输入错误!");
}

掌握这些格式化输入输出方法可以让你在C语言中更灵活地处理各种数据输入输出需求。

相关文章:

  • ubuntu18.04安装QT问题汇总
  • 【STM32单片机】#10 USART串口通信
  • Kubernetes 多主多从集群部署完整文档
  • 解码 Web Service:从技术原理到应用场景的深度剖析
  • (2)Vue事件绑定的使用
  • 测试第四课---------性能测试
  • JAVA IO、BIO、NIO、AIO及零拷贝
  • 数据从辅存调入主存,页表中一定存在
  • LinearLayout 线性布局
  • 6.7 ChatGPT自动生成定时任务脚本:Python与Cron双方案实战指南
  • dac直通线还是aoc直通线? sfp使用
  • Shell脚本-什么时候需要定义变量
  • 【2025】Datawhale AI春训营-蛋白质预测(AI+生命科学)-Task2笔记
  • 实战交易策略 篇十六:猎豹阿杜打板交易策略
  • PHP异常处理__Exception类
  • TV主板的拆解学习
  • 实战交易策略 篇十五:东莞小文超级短线交易策略
  • @EnableAsync+@Async源码学习笔记之三
  • 详讲Linux下进程等待
  • 美信监控易:数据采集与整合的卓越之选
  • 中国政府援缅第七批抗震救灾物资运抵交付
  • 人民日报:各地扎实开展学习教育,一体推进学查改
  • 独家专访|苏童:《好天气》是一部献给中国郊区的作品
  • 2025年福建省文旅经济发展大会召开
  • 我国成功发射试验二十七号卫星01星~06星
  • 观察|如何推动再保险交易规模上量增加话语权,行业在临港新片区共倡议