C语⾔中输⼊输出所有格式控制符
title: C语⾔中输⼊输出所有格式控制符
date: 2020-01-16 17:02:06
description: C语⾔输⼊输出的所有格式控制详解
C语⾔中输⼊输出所有格式控制符
最近在重温C语⾔,发现C语⾔的输⼊输出函数scanf和printf函数在控制输⼊输出时有许多控制符来控制输⼊输出数据的格式。于是就打算来整理⼀下。
参考词条
scanf()是C语⾔中的⼀个输⼊函数。与printf函数⼀样,都被声明在头⽂件stdio.h⾥。它是格式输⼊函数,即按⽤户指定的格式从键盘上把数据输⼊到指定的变量之中。
printf命令的作⽤是格式化输出函数,⼀般⽤于向标准输出设备按规定格式输出信息。printf()函数的调⽤格式为:printf("<;格式化字符串>", <;参量表>)。printf()是C语⾔标准库函数,在 stdio.h 中定义。
输出的字符串除了可以使⽤字母、数字、空格和⼀些数字符号以外,还可以使⽤⼀些转义字符表⽰特殊的含义。
函数定义
int printf(char *format…);
int scanf(const char * restrict format,…);
函数返回值
printf 函数的返回值为printf实际控制输出的字符数。
scanf函数返回成功读⼊的数据项数,读⼊数据时遇到了“⽂件结束”则返回EOF。
格式控制字符串format
printf的格式控制字符串format组成如下:
%[flags][width][.prec][length]type
即:%[标志][最⼩宽度][.精度][类型长度]类型控制符
详解见下⽂。
⽤法详解
通常意义上format的格式如下:[]⾥的内容表⽰可选,即可带可不带。
%[flags][width][.prec][length]type
规定输出数据的格式,具体如下:[1]
类型控制符type
type的字符⽤于规定输出数据的类型,含义如下:
字符对应数据类型含义
d / i int接受整数值并将它表⽰为有符号的⼗进制整数,i是⽼式写法
o unsigned int⽆符号8进制整数(不输出前缀0)
u unsigned int⽆符号10进制整数
字符对应数据类型含义
x / X unsigned int⽆符号16进制整数,x对应的是abcdef,X对应的是ABCDEF(不输出前缀0x)
f(lf)double单精度浮点数和双精度浮点数⽤f(lf 在C99开始加⼊标准,意思和 f 相同)
e / E double科学计数法表⽰的数,基数为10,此处"e"的⼤⼩写代表在输出时⽤的"e"的⼤⼩写
a / A double16进制科学计数法表⽰的数,基数为2,以p表⽰,以16进制输出,此处"a"的⼤⼩写代表在输出时⽤的"p"的⼤⼩写
g / G double有效位数,如:%.8g表⽰单精度浮点数保留8位有效数字
c char字符型。可以把输⼊的数字按照ASCII码相应转换为对应的字符
s / S char * / wchar_t *字符串。输出字符串中的字符直⾄字符串中的空字符(字符串以’\0’结尾,这个’\0’即空字符)
p void *以16进制形式输出指针
n int *到此字符之前为⽌,⼀共输出的字符个数,不输出⽂本
%⽆输⼊不进⾏转换,输出字符‘%’(百分号)本⾝
m⽆打印errno值对应的出错内容,(例: printf("%m\n"); )
注:%g、%G在⼩数点位数四位或指数⼤于等于精度时⽤%e、%E,否则⽤%f。
标志flags
flags规定输出样式,取值和含义如下:
字符字符名称说明
-减号左对齐,右边填充空格(默认右对齐)
+加号在数字前增加符号 + 或 -
0数字零将输出的前⾯补上0,直到占满指定列宽为⽌(不可以搭配使⽤"-")
空格输出值为正时加上空格,为负时加上负号
#井号type是o、x、X时,增加前缀0、0x、0X;type是e、E、f、g、G时,⼀定使⽤⼩数点;type是g、G时,尾部的0保留
⽰例:
printf("%5d\n",1000); //默认右对齐,左边补空格
printf("%-5d\n",1000); //左对齐,右边补空格
printf("%+d %+d\n",1000,-1000); //输出正负号
printf("% d % d\n",1000,-1000);//正号⽤空格替代,负号输出
printf("%x %#x\n",1000,1000); //输出0x
printf("%.0f %#.0f\n",1000.0,1000.0)//当⼩数点后不输出值时依然输出⼩数点
printf("%g %#g\n",1000.0,1000.0); //保留⼩数点后后的0
printf("%05d\n",1000); //前⾯补0
输出最⼩宽度width
⽤于控制显⽰数值的宽度,取值和含义如下:
n(n=1,2,3,4,5,6…): 宽度⾄少为n位,不够以空格填充。
&esmp;* 格式列表中,下⼀个参数还是width
width是⼀个可选的指定最⼩值字段宽度的⼗进制数字字符串。如果转换值字符少于字段宽度,该字段将从左到右按指定的字段宽度填充。如果指定了左边调整选项,字段将在右边填充。如果转换结果宽于字段宽度,将扩展该字段以包含转换后的结果。不会发⽣截断。然⽽,⼩的精度可能导致在右边发⽣截断。
格式化命令format参数精度.prec
⽤于控制⼩数点后⾯的位数,取值和含义如下:
⽆按缺省精度显⽰0
当type=d,i,o,u,x时,没有影响;
type=e,E,f时,不显⽰⼩数点
n(n=1,2,3…)
当type=e,E,f时表⽰的最⼤⼩数位数;
type=其他,表⽰显⽰的最⼤宽度
prec是指可选的精度。精度是⼀个.(点)后跟⼗进制数字字符串。如果没有给出精度,按 0(零)对待。精度指定:* d、o、i、 u、x 或 X 转换的最少数字显⽰位数。
* e 和 f 转换的基数字符后的最少数字显⽰位数。
* g 转换的最⼤有效数字位数。
* s 转换中字符串的最⼤打印字节数⽬。
类型长度length
类型长度指明待输出数据的长度。因为相同类型可以有不同的长度,⽐如整型有16bits的short int,32bits的int,也有64bits的long int,浮点型有32bits的单精度float和64bits的双精度double。为了指明同⼀类型的不同长度,类型长度(length)应运⽽⽣,成为格式控制字符串的⼀部分。
length描述
h参数被解释为短整型或⽆符号短整型(仅适⽤于整数说明符:i、d、o、u、x 和 X)。
l参数被解释为长整型或⽆符号长整型,适⽤于整数说明符(i、d、o、u、x 和 X)及说明符 c(表⽰⼀个宽字符)和 s(表⽰宽字符字符串)。
L参数被解释为长双精度型(仅适⽤于浮点数说明符:e、E、f、g 和 G)。
根据不同的 format 字符串,函数可能需要⼀系列的附加参数,每个参数包含了⼀个要被插⼊的值,替换了 format 参数中指定的每个 %标签。参数的个数应与 % 标签的个数相同。 [2]
转义序列
这些转义序列在字符串中会被⾃动转换为相应操作命令。使⽤的常见转义字符如下:
符号意义符号意义
\a铃声(提醒)\b Backspace
\f换页\n换⾏
\r回车\t⽔平制表符
\v垂直制表符\’单引号
\”双引号\\反斜杠
⽂本问号\ooo(例如\024)ASCII字符(OCX) \xhh (例如:\x20)ASCII字符(HEX)\xhhhh宽字符(2字节HEX)
例如,WCHAR f = L’\x4e00’ 或 WCHAR b[] = L"The Chinese character for one is \x4e00"。
[1]Brian W.Kernighan,Dennis M.Ritchie.C程序设计语⾔.中国:机械⼯业出版社,2004年1⽉1⽇:221-222
[2]Stephen Prata.C Primer Plus(第五版):⼈民邮电出版社,2005年2⽉1⽇
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论