C printf格式化输出
转载:https://blog.csdn.net/wucz122140729/article/details/98434702
格式化输出
格式化输出的函数有printf、sprintf和snprintf等,功能略有不同,使用方法大同小异,本章节我们以printf为例。
对于 printf 函数,相信大家并不陌生。之所以称它为格式化输出函数,该函数的声名如下:
int printf(const char *format, ...);
大家看到printf函数的声明就会有点懵,它参数的写法与我们之前学到的函数知识不一样,printf函数是一个“可变参数函数”(即函数参数的个数是可变的),可变参数函数的知识以后再介绍,现在只要知道怎么使用就行了。
printf函数的参数的个数和类型都是可变的,每一个参数的输出格式都有对应的格式说明符与之对应,从格式串的左端第 1 个格式说明符对应第 1 个输出参数,第 2 个格式说明符对应第 2 个输出参数,第 3 个格式说明符对应第 3 个输出参数,以此类推。
其中,格式说明符的形式如下(方括号 [] 中的项为可选项):
%[flags][width][.prec] type
1、类型符(type)
它用以表示输出数据的类型,以下是常用类型的汇总,不常用的就不列了。
%hd、%d、%ld 以十进制、有符号的形式输出 short、int、long 类型的整数。
%hu、%u、%lu 以十进制、无符号的形式输出 short、int、long 类型的整数
%c 输出字符。
%lf 以普通方式输出double(float弃用,long doube无用)。
%e 以科学计数法输出double。
%s 输出字符串。
以上输出数据的知识在之前介绍数据类型的时候已演示过,这里就不举例了。
2、宽度(width)
它用于控制输出内容的宽度。
printf("=%12s=\n","abc"); // 输出= abc=
printf("=%12d=\n",123); // 输出= 123=
printf("=%12lf=\n",123.5); // 输出= 123.500000=
3、对齐标志(flags)
flags它用于控制输出内容的对齐方式。
不填或+:输出的内容右对齐,这是缺省的方式,上一小节就是右对齐的示例。
-:输出的内容左对齐。
printf("=%-12s=\n","abc"); // 输出=abc =
printf("=%-12d=\n",123); // 输出=123 =
printf("=%-12f=\n",123.5); // 输出=123.500000 =
如果输出的内容是整数或浮点数,并且对齐的方式是右对齐,可以加0填充,例如:
printf("=%012s=\n","abc"); // 输出= abc=
printf("=%012d=\n",123); // 输出=000000000123=
printf("=%012f=\n",123.5); // 输出=00123.500000=
从上面第一行代码的结果看出,输出的内容不是整数或浮点数,是字符串,不能在前面填0。
左对齐的时候,能在整数或浮点数的后面补0吗?浮点数最多可以补到6位,整数不行,你的存款能在后面补0吗?
4、精度(prec)
如果输出的内容是浮点数,它用于控制输出内容的精度,也就是说小数点后面保留多少位,后面的数四舍五入。
printf("=%12.2lf=\n",123.5); // 输出= 123.50=
printf("=%.2lf=\n",123.5); // 输出=123.50=
printf("=%12.2e=\n",123500000000.0); // 输出= 1.24e+11=
printf("=%.2e=\n",123500000000.0); // 输出=1.24e+11=
格式化输出到字符串
int printf(const char *format, ...);
int sprintf(char *str, const char *format, ...);
int snprintf(char *str, size_t size, const char *format, ...);
功能:printf是把结果输出到屏幕,sprintf把格式化输出的内容保存到字符串str中,snprintf的n类似于strncpy中的n,意思是只获取输出结果的前n-1个字符,不是n个字符。
在之前的章节中,介绍过把字符串转换为整数和浮点数据的库函数,C语言没有提供把整数和浮点数据转换为字符串的库函数,而是采用sprintf和snprintf函数格式化输出到字符串。
示例(book98.c)
运行结果
程序运行第二行只输出了14个字符,注意,snprintf函数在unix和windows平台下的表现略有不同,在windows平台下,第二行会输出15个字符。
C语言多行书写
在我们之前学习的过程中,编写的程序的功能很简单,一句代码很短,但是在实际开发中,参数往往很长很多,一句代码可能会很长,需要用多行才能书写。
如果我们在一行代码的行尾放置一个反斜杠,c语言编译器会忽略行尾的换行符,而把下一行的内容也算作是本行的内容。这里反斜杠起到了续行的作用。
如果我们不使用反斜杠,当我们试图初始化一个跨多行的字符串时,c语言编译器可能会发出警告或错误。如下面的语句所示:
C语言中还有一种拆分字符串的方法,那就是将其写个多个字符串,C语言编译器会自动将这些字符串连接起来。因此,下面的表达式:"aaaaa" "bbbbb" "ccccc" 实际上相当于 "aaaaabbbbbccccc"。
多行书写的方法如下:
把字符串很长,参数很多的代码用多行书写,可以使程序代码结构更清晰,以下代码是我实际开发中用到的一句代码,这还不算长的。
————————————————
版权声明:本文为CSDN博主「C语言技术网-码农有道」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wucz122140729/java/article/details/98434702
C printf格式化输出的更多相关文章
- C语言 printf格式化输出,参数详解
有关输出对齐 int main(int argc, char* argv[]){ char insertTime[20] = {"1234567890"}; double in ...
- (Go)06. Printf格式化输出、Scanf格式化输入详解
Print.Println .Printf .Sprintf .Fprintf都是fmt 包中的公共方法,在需要打印信息时需要用到这些函数,那么这些函数有什么区别呢? Print: 输出到控制台(不接 ...
- shell printf格式化输出语句
printf 命令用于格式化输出, 是echo命令的增强版.它是C语言printf()库函数的一个有限的变形,并且在语法上有些不同. 注意:printf 由 POSIX 标准所定义,移植性要比 ech ...
- KEIL C51 printf格式化输出特殊用法
作者:dragoniye 发布:2014-02-15 12:44 分类:硬件 抢沙发 /*******************************************KEI ...
- printf 格式化输出符号详细说明(转)
%a 浮点数.十六进制数字和p-记数法(C99)%A 浮点数.十六进制数字和p-记法(C99)%c 一个字符(char) %C 一个ISO宽字符 %d 有符 ...
- Linux中printf格式化输出
printf使用文本或者由空格分隔的参数,我们可以在printf中使用格式化字符串.printf不会写像echo那样自动添加换行符,必须手动添加 =========================== ...
- win32程序调试OutputDebugString 类似printf格式化输出
有没有win32编程因为打印变量调试程序而头疼呢.方法二的函数完全类似printf.非常完美.方法一:不带参数输出如printf("hello world"); OutputDeb ...
- printf()格式化输出详解
% - 0 m.n l或h 格式字符 下面对组成格式说明的各项加以说明: ①%:表示格式说明的起始符号,不可缺少. ②-:有-表示左对齐输出,如省略表示右对齐输出. ③0:有0表示指定空位填0,如省略 ...
- C语言printf格式化输出修饰符详解
转换说明 输出 %a,%A 浮点数.十六进制数和p-计数法(C99) %c 一个字符 %d 有符号十进制数 %e,%E 浮点数,e计数法 %f 浮点数,十进制计数法 %g,%G 根据数值不同自动选择% ...
随机推荐
- 关于oracle中(+)的运用
一.基础 1.1 SQL查询的基本原理 第一.单表查询:根据WHERE条件过滤表中的记录,形成中间表(这个中间表对用户是不可见的):然后根据SELECT的选择列选择相应的列进行返回最终结果.第二.两表 ...
- 云原生 PostgreSQL 集群 - PGO:5分钟快速上手
前提条件 请确保您的主机上安装了以下实用程序: kubectl git 安装 第 1 步:下载示例 首先,转到 GitHub 并 fork Postgres Operator 示例存储库: https ...
- docker安装与基本使用
一.docker简介 docker的英文翻译是 "码头工人",即搬运工,它搬运的东西就是我们常说的集装箱Container,Container里面装的是任意类型 ...
- 【C# 线程】优先级反转与优先级继承
什么是优先级反转(翻转)优先级反转,是指在使用信号量时,可能会出现的这样一种不合理的现象,即: 高优先级任务被低优先级任务阻塞,导致高优先级任务迟迟得不到调度.但其他中等优先级的任务却能抢到CP ...
- 【C# 程序集】C# assembly和module 根本区别
相同点 两者都有:manifest.metadata.IL 不同点 1.assembly 有main程序函数.module只能附属于程序集,程序集可以拥有多个. 2.metadata的差异 程序集特有 ...
- 使用Irony开发译码器
使用Irony开发一个针对G代码的译码器.不想使用Lex&Yacc的原因是: 1.我只会用C#和Python写代码,用Lex&Yacc还得学习新的语法规范,我懒: 2.Lex& ...
- vue--前端路由及vue-router两种模式
前言 路由这个概念最早在后端出现,随后前后端分离,直至当今的单页面应用,路由也在一直发生变化.本文来总结一下路由变化和vue-router中的路由模式区别相关知识点. 正文 1.什么是前端路由 (1) ...
- c# 表格控件SourceGrid使用总结
网上SourceGrid相关的资料很少,使用过程中做了下记录,以便日后查用 1:初始化 this.grid = new SourceGrid.Grid(); this.grid.Size = new ...
- Mysql的用户管理与授权
Mysql用户管理 本人使用的是Mysql8.0的版本,可能会有一些语句不兼容: 1.用户管理 在Mysql中支持创建账户,并给账户分配权限:例如只拥有数据库A操作的权限.只拥有数据库B中某些表的权限 ...
- MySQL函数及存储过程
MySQL函数及存储过程 参考文章:https://www.cnblogs.com/wupeiqi/articles/5713323.html 1.函数 1.1内置函数 官方文档:https://de ...