C语言printf格式输出函数中的格式字符问题

在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”删除吗?具体点是要采用下列两种的那种方案? ①#include<stdio.h>void main (){long a=-1;printf("%lo,%lx,%mo,%mx",a,a,a,a);}②#include<stdio.h>void main (){long a=-1;printf("%lo,%lx,%mlo,%mlx",a,a,a,a);}另外,用八进制无符号形式和十六进制无符号形式输出基本整型数据的时候并未说明是否可以指定字段宽度,不知可否?由于所用教材使用的是Turbo C++3.0的编译系统,我使用的是Visual Studio 2010的编译系统,两个系统环境对基本整型数据、短整型数据、长整型数据分配的存储空间不同,输出的数据也不同!所以上机验证了几次也不敢确定。新手学习,疑惑不少!望给予指导!谢啦!

你的教材可能太老。
现在,只有 double 用到 %lf, 其它输出 不需要 添 l.
%10d -- 输出 整型,十进制,占10位。 long int, short int 都可以用
%08x -- 按16进制 无符号输出,小写,共8 位,不足8位左边添0
%20u -- 按十进制 无符号数 输出,占20位。
温馨提示:答案为网友推荐,仅供参考
相似回答