C语言printf格式输出函数中的格式字符问题
答案:2 悬赏:60
解决时间 2021-04-18 06:35
- 提问者网友:浪荡羁士
- 2021-04-18 02:19
在C语言中,对不同类型的数据要使用不同的格式字符输出。如果使用ANSI C标准函数库中的printf(格式输出函数)时,以八进制无符号形式(o格式符)输出有符号长整型数据(long型或signed long int )和以十六进制无符号形式(x格式符)输出有符号长整型数据(long型或signed long int )的时候可分别使用“%lo”和“%lx”格式字符,但如果是要指定输出字段宽度(设m为指定输出字段的宽度)的时候,究竟是要用“%mo”和“%mx”呢,还是要用“%mlo”和“%mlx”?书上的介绍内容是,用有符号十进制形式(d格式符)在输出有符号基本整型数据(int型)的时候采用“%d”而如果要指定输出字段宽度(设m为指定输出字段宽度)的时候则可使用“%md”;同样的,在用“%ld”输出长整型数据的时候,若指定输出字段宽度的话则是“%mld”。难道用八进制和十六进制在输出长整型数据的时候要加一个字符“l”,以说明输出的长整型数据,而在要指定输出字段宽度的时候又要将“l”删除吗?具体点是要采用下列两种的那种方案? ①#includevoid main (){long a=-1;printf("%lo,%lx,%mo,%mx",a,a,a,a);}②#includevoid main (){long a=-1;printf("%lo,%lx,%mlo,%mlx",a,a,a,a);}另外,用八进制无符号形式和十六进制无符号形式输出基本整型数据的时候并未说明是否可以指定字段宽度,不知可否?由于所用教材使用的是Turbo C++3.0的编译系统,我使用的是Visual Studio 2010的编译系统,两个系统环境对基本整型数据、短整型数据、长整型数据分配的存储空间不同,输出的数据也不同!所以上机验证了几次也不敢确定。新手学习,疑惑不少!望给予指导!谢啦!
最佳答案
- 二级知识专家网友:萝莉姐姐鹿小北
- 2021-04-18 02:36
你的教材可能太老。
现在,只有 double 用到 %lf, 其它输出 不需要 添 l.
%10d -- 输出 整型,十进制,占10位。 long int, short int 都可以用
%08x -- 按16进制 无符号输出,小写,共8 位,不足8位左边添0
%20u -- 按十进制 无符号数 输出,占20位。
现在,只有 double 用到 %lf, 其它输出 不需要 添 l.
%10d -- 输出 整型,十进制,占10位。 long int, short int 都可以用
%08x -- 按16进制 无符号输出,小写,共8 位,不足8位左边添0
%20u -- 按十进制 无符号数 输出,占20位。
全部回答
- 1楼网友:初心未变
- 2021-04-18 04:00
标准c语言库函数fprintf/printf格式字符串的转换说明形式是这样的:
%[标志][最小输出宽度][.精度][长度修正符]类型
方括号括起来是可选项。
标志是0或多个标志字符,可以是任意顺序,常用有以下几个:
- 左对齐,缺省是右对齐。
+ 带符号的值前面总是有个符号,也就是正数前面有+号,负数前面有-号。
0 输出值的宽度小于最小宽度的话,用0填充,缺省是用空格填充。
最小输出宽度就是你说的那个m,这个必须是10进制整数常量,开头不能是0,不然变成上面的0标志了。如果输出的值小于这个宽度,根据上面的对齐标志决定左对齐还是右对齐,剩下的用填充字符填充,缺省是空格,用0标志指定的话是0。
精度一般是小数点后面跟1个十进制数,对于整型,表示要输出的最少位数,不足的话前面会补0,对于小数,表示小数点后面输出几位小数。
长度修正符修正后面类型的输出长度。l表示long或unsigned long,ll表示long long int或unsigned long long int,h表示short或unsigned short,hh表示为char或unsigned char,l表示long double。
最后的类型就是常见的d,o,x,f,c,s一类的,这个意思就不用说了吧。
最小输出宽度和长度修饰符是不冲突的,所以要输出长整型又要指定输出字段宽度,必须两个都指定。
%8ld,%8lo,%8lx这样都可以。
而%mlo,%mlx是错误的的转换说明,因为最小输出宽度必须是数字,写成m根本就不会输出。
上面的选项都还有一些不常用的,具体可以参考c语言标准。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯