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

C语言的格式化输出 printf

最近在看一些新手写的代码,发现大家在最基本的printf上经常出状况。这玩意虽然是入门第一课就会见到的函数,但它的参数设计其实挺别扭的。今天把printf的使用细节和几个极其容易让人抓狂的坑顺一遍。


怎么理解这玩意?

在 C 语言里,我们想在控制台看数据,基本上全靠printf。那个字母f代表 formatted(格式化)。因为 C 语言没有其他高级语言那种用加号拼接字符串的便利设计,我们要输出稍微复杂点的内容,就得用它来“拼图”。

它的调用方式是这样的:printf("一个带占位符的模板", 变量列表);

简单来说,你先在双引号里写好你要输出的格式,在需要填入数据的地方放一个百分号%开头的字符(占位符)占个坑,然后在双引号后面,按顺序把变量传进去填坑。

初学时别去背那些密密麻麻的格式表,记住这四个最常用的就足够了:

  • %d:对应整数(int)。
  • %f:对应小数(floatdouble)。如果不加控制,它默认会输出六位小数。通常我们会写成%.2f(保留两位小数)或%.1f(保留一位)。
  • %c:对应单个字符(char)。
  • %s:对应字符串(也就是一串字符)。

另外,双引号里还可以放排版控制符,比如\n代表换行,\t代表水平制表符(相当于按了一下 Tab 键)。要是漏了\n,控制台打印出来的字就会全部黏在一起,看起来非常业余。


上代码看看

我们用一个买奶茶的账单例子,来看看怎么格式化输出:

#include <stdio.h> int main() { int cups = 2; // 买了2杯 double price = 16.5; // 单价16.5元 char size = 'L'; // 大杯 // 打印标题行,用 \t 控制间距对齐 printf("品名\t数量\t单价\t规格\n"); // 填坑打印数据,注意顺序要和占位符严格一致 printf("奶茶\t%d\t%.1f\t%c\n", cups, price, size); printf("账单状态:%s\n", "已结算"); return 0; }
代码逐行拆解:
  • printf("品名\t数量\t单价\t规格\n");: 打印完每个词后插入\t,大厨(系统)会自动空出合适的空格,这样下一行的数据就能跟它对齐。
  • printf("奶茶\t%d\t%.1f\t%c\n", cups, price, size);: 这一行挖了三个坑。后面的cups填入%dprice填入%.1fsize填入%c。顺序要是错了,输出结果就会完全乱套。

两个容易卡住的坑

新手用printf,十个有九个会卡在下面这两个问题上:

踩坑注意:类型匹配写错,或者在变量名前面误加了取地址符&

错误代码示范:
#include <stdio.h> int main() { int num = 100; double val = 12.34; // 错误 1:打印变量时加了 & 符号 printf("数值是:%d\n", &num); // 错误 2:用 %d 占位符去打印 double 类型的小数 printf("小数是:%d\n", val); return 0; }
怎么修正:

对于第一个错误,printf只需要拿到num盒子里装的值(100),但你加了&,传过去的就变成了num在内存里的物理地址。结果屏幕上会打印出一长串莫名其妙的超级大数字。修正方法是直接写num,不要加&

对于第二个错误,val是 8 字节的 double 小数,但你却用只读取 4 字节的%d去解析它。由于内存读取宽度对不上,计算机解析出来的值通常会直接显示为0或者其他垃圾数值。修正方法是把%d改为%f%.2f


留个小练习

动手写几行代码测试一下。

  • 挑战题目: 编写一个 C 程序,声明并初始化三个变量:品名(字符串,如 "可乐")、数量(整型,如 3)、价格(浮点型,如 3.5)。只使用一个printf语句,在控制台屏幕上输出以下三行信息,且确保数据在纵向排列上完全对齐:

    品名 数量 价格 可乐 3 3.50 薯片 1 7.50

参考答案与思路:

我们可以把所有文字和数据合并在一个printf语句里,中间利用\t控制缩进,行尾用\n控制换行。因为浮点数默认输出 6 位小数,所以价格占位符要用%.2f

#include <stdio.h> int main() { // 单个 printf 打印三行规整表格 printf("品名\t数量\t价格\n可乐\t%d\t%.2f\n薯片\t%d\t%.2f\n", 3, 3.50, 1, 7.50); return 0; }

跑一下代码,看看输出的表格是不是非常规整。

http://www.gsyq.cn/news/1489764.html

相关文章:

  • 不惧和谐,永不失效!!
  • OpenClaw一键部署:5分钟玩转AI办公神器
  • COM3D2 MaidFiddler终极指南:免费实时游戏编辑器完整教程
  • RNOH x HarmonyOS Core Speech Kit TTS:商品卖点语音播报真机实践
  • 小程序毕业设计-基于springboot的旅游线路定制微信小程序基于springboot+微信小程序的旅游线路定制微信小程序(源码+LW+部署文档+全bao+远程调试+代码讲解等)
  • Samsung K4T1G164QE-HCE7引脚功能与封装:DDR2 SDRAM内存颗粒数据手册
  • 机器学习数据缺失值处理全攻略
  • 2026年去毛刺打磨机排名,佛山龙砺智能名列前茅 - myqiye
  • 2026q2南充选装修公司:南充哪家装修公司口碑好/南充房屋装修/南充整装装修/从技术维度看口碑真相 - 优质品牌商家
  • 2026年马来西亚公司注册服务TOP5机构排行及选购推荐 - 优质品牌商家
  • 考研数学资料怎么选|数一数二数三|资料已整理
  • Stable Baselines3:强化学习入门者的终极实战指南
  • Windows终极优化神器:WinUtil一键管理你的系统
  • 2026年包就业职高选购指南,现代交通技工学校值得考虑 - myqiye
  • 别再只用uvm_do了!手把手教你用start_item/finish_item精准控制UVM Sequence(附源码分析)
  • 2026年污泥干燥机费用,哪家价格合理 - myqiye
  • Vue01
  • 怎样同时采集美团和饿了么两个平台的竞品数据?——2026跨平台AI Agent自动化实战指南
  • 基于spark的南宁空气质量评估与预测系统的设计与实现
  • 陈刚直言 | 华为韬(τ)定律启示:发起 AMT2ABC 开源生态
  • Diablo Edit2:暗黑破坏神2终极存档编辑与角色修改器完全指南
  • C++ 面向对象核心机制深度解析:多态性、虚函数、虚继承与 final 类
  • 2026年售后完善的上门搬家机构收费贵吗 - mypinpai
  • 3分钟搞定XAPK转APK:这款无依赖Python工具让你告别安装烦恼
  • 赤火时代水淬炉,好用又靠谱,性价比超高 - 工业品牌热点
  • 时事蹭热度系列之四:那个哭着返校的女孩,让我重新思考了教育
  • 今日开源[第12期]LiteParse - zhang
  • 信号处理实战:用db4小波四层分解,从Matlab分析到C语言移植的避坑指南
  • 鸿蒙原生 ArkTS:border 的盒模型、深层嵌套约束传递与 scale 缩放
  • MATLAB R2021b + UE4.25联合仿真避坑实录:手把手解决插件路径找不到的报错