C语言格式控制符

顾名思义,格式控制符就是对标识符或表达式的格式进行控制,它决定了标识符或表达式的输出形式(长度、对齐方式、小数位数等),它也是C语言中非常重要的一个概念。本人实际工作中虽然经常用到格式控制符,但用的最多的无非是%d%c%s这些,但是在本篇中我将尽可能全面的介绍格式控制符,这其中必然会涉及到好多我没用到的标识符,当然我会尽量在程序中加以验证,同时如有不足之处望不吝赐教,拜谢。

1.格式控制符形式

%  [{+,-}]  [o]  [{m,m.n}]  [{l,h}] <格式控制符>

其中,中括号[]里的内容是可选的,<>里的内容是必须的。以下对各个标志的含义简要介绍:

%:表示格式控制的起始符号,必不可少。--格式控制起始位置

+/-:表示对齐标志,+表示右对齐,-表示左对其,缺省情况下为右对齐。--对齐标志

o:表示当实际长度没有格式控制的长度大时,用“o”补全。--补全内容

m/m.n:其中,m表示输出所占位宽,n表示实际取标识符的多少位输出--占位长度

l/h:l对整型指long型,对实型指double型;h用于将整型字符修正为short

<>:格式控制符

1.1格式控制符

%d:用于输出整型数(整型指本质为整型的数,如intshortchar等)

%c:用于输出一个字符

%s:用于输出一个字符串

%o:以无符号八进制形式输出整数值

%x:以无符号十六进制形式输出整数值

%u:以无符号形式输出十进制数

%f:用来输出浮点数(float),精度为6位小数,第七位四舍五入。

%p:指针的值

1.2占位长度与格式控制符搭配输出

1.2.1 占位长度与%d搭配

%mdm为指定的输出数据的位宽。如果数据的位数小于m,则左端补以空格(因为默认右对齐,所以左补用以占位);如果数据的位数大于m,则以数据的实际位数输出。示例如下:


1.2.2 占位长度与%c搭配

一般无此搭配方式。

1.2.3 占位长度与%s搭配

%msm为指定的输出字符串的宽度。如果字符串的位数小于m,则左端补空格;如果字符串的位数大于m,则以实际的字符串长度输出。实例如下:


%m.ns:意为从左向右截取字符串的n位输出到占位m的位置,左补空。设字符串实际长度为len,则具体表现形式如下:

1.n<len

截取字符串前n个字符,然后做如下判断:

m<n:则输出n个字符

m>n:则输出m个字符,左补空


2.n>len

取字符串的实际(长度len)字符,然后做如下判断:

m<len:则输出len个字符

m>len:则输出m个字符,左补空格


1.2.4 占位长度与%f搭配

%m.nfm为占位宽度,n为小数点右边的位数,浮点数的规则较字符串比起来更为复杂些,你不但要关注浮点数的总占位宽,还要关注小数的占位宽。小数部分的精度为lenDot,下面分整数位数与小数位数简要分析下:

1.2.4.1小数部分:

由于浮点数float的精度为6(即lenDot=6)。算小数部分原则:

1)首先根据浮点数的实际精度得出近似值,原则为:

若浮点数的实际小数位长大于6,则截取6位,第七位四舍五入;若浮点数的实际小数位数小于6,则后补0。如1.23转换成1.2300001.23456789转换成1.234568

2)根据上步中的结果值,从中截取n位长。注意:n一般小于或等于6,因为超过6位的数据不真实。

1.2.4.2整数部分:

整数部分完整输出,唯一要注意的是:

m>(整数位宽+小数点位宽+n)时,左补空。

1.2.4.3示例如下:

1.2.4.4建议

一般不对浮点数float输出大于6位的小数,因为大于6位后的数据已经在浮点精度之外了,是不正确的数据。

1.3补全内容与占位长度、控制符的搭配输出

当标识符的占位长度大于实际的长度时,在多出的位置处用补全内容填充。补全内容默认为空,可以显式指定补全内容为0。实例如下:

 

1.4对齐标志

对齐标志有两种:+-,其中缺省为++表示右对齐,-表示左对齐。对齐标志要相对简单、更好理解,所以不细讲,直接举例验证,如下:

左对齐:

 

右对齐:


2.总结

格式控制符直接影响着程序输出的外观,所以在C语言学习着占据着举足轻重的作用,基本上我们每天的编程都会与它打交道。所以这部分内容值得细细体会、多上机实践。养成善于总结、记笔记的习惯,相信学好它们不在话下。

3.参考文章

本文参考了xuangong的博文:http://www.cnblogs.com/xuangong/archive/2011/07/29/2121537.html



  • 26
    点赞
  • 127
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
C语言中的输出格式控制符用于指定输出的格式。以下是一些常用的输出格式控制符: - %c:输出一个单一的字符。 - %d、%ld:以十进制、有符号的形式输出short、int、long类型的整数。 - %u、%lu:以十进制、无符号的形式输出short、int、long类型的整数。 - %o、%lo:以八进制、不带前缀、无符号的形式输出short、int、long类型的整数。 - %#o、%#lo:以八进制、带前缀、无符号的形式输出short、int、long类型的整数。 - %x、%lx:以十六进制、不带前缀、无符号的形式输出short、int、long类型的整数。如果x小写,输出的十六进制数字也小写;如果X大写,输出的十六进制数字也大写。 - %#x、%#lx:以十六进制、带前缀、无符号的形式输出short、int、long类型的整数。如果x小写,输出的十六进制数字和前缀都小写;如果X大写,输出的十六进制数字和前缀都大写。 - %f、%lf:以十进制的形式输出float、double类型的小数。 - %e、%le:以指数的形式输出float、double类型的小数。如果e小写,输出结果中的e也小写;如果E大写,输出结果中的E也大写。 - %g、%lg:以十进制和指数中较短的形式输出float、double类型的小数,并且小数部分的最后不会添加多余的0。如果g小写,当以指数形式输出时e也小写;如果G大写,当以指数形式输出时E也大写。 - %s:输出一个字符串。 以下是一个使用示例: ```c #include <stdio.h> int main() { int a = 12; float b = 3.1415; char c = 'A'; printf("%d\n", a); printf("o%o\n", a); printf("0x%x\n", a); printf("%3.2f\n", b); printf("%c\n", c); return 0; } ``` 输出结果为: ``` 12 o14 0xc 3.14 A ``` 希望这个回答对你有帮助!\[1\] \[2\] #### 引用[.reference_title] - *1* [C语言 printf](https://blog.csdn.net/imxlw00/article/details/89287406)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [[C语言]格式控制符](https://blog.csdn.net/m0_74290207/article/details/129461436)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值