格式控制符有哪些,9 写出所有可以用于printf函数的格式控制符

1,9 写出所有可以用于printf函数的格式控制符①d格式:用来输出十进制整数 。②o格式:以无符号八进制形式输出整数 。对长整型可以用"%lo"格式输出 。同样也可以指定字段宽度用“%mo”格式输出 。③x格式:以无符号十六进制形式输出整数 。对长整型可以用"%lx"格式输出 。同样也可以指定字段宽度用"%mx"格式输出 。④u格式:以无符号十进制形式输出整数 。对长整型可以用"%lu"格式输出 。同样也可以指定字段宽度用“%mu”格式输出 。⑤c格式:输出一个字符 。⑥s格式:用来输出一个串 。⑦f格式:用来输出实数(包括单、双精度),以小数形式输出 。⑧e格式:以指数形式输出实数 。⑨g格式:自动选f格式或e格式中较短的一种输出 , 且不输出无意义的零 。printf的用法比较灵活,常用的有这几个%d 十进制整数%f浮点数%g浮点数最短形式%s字符串%c字符%x十六进制然后对这些字符进行修饰可以得到其它效果,下面是几个例子%5d 输出一个宽度为5的整数,若超过则完整输出,不足5个字符自动用空格补%03d 总宽为3 ,  不足以用0来补 %5.3f 输出一个宽度为5,保留3位小数的小数%-10s 总长为10右对齐大概常用的就这些了,完整的可以上百度看看,更详细的参考MSDN
2,c 格式控制符 全称d=decimal,(Signed decimal integer)十进制o=octal,(Signed octal)八进制x=heXadecimal,(Unsigned hexadecimal integer)十六进制u=unsigned,(Unsigned decimal integer)无符号十进制c=character,也就是char类型s=string,(String of characters)字符串f=float,(Decimal floating point)十进制浮点类型e=exponent,(Scientific notation (mantise/exponent) using e character)指数形式的浮点数g,(Use the shorter of %e or %f)从指数形式和浮点形式中取较短的表示法1. cout double(int(n*10^6)/10^6)这样应该可以int()强制类型转换可以使n*10^6只取整数部分2.开始加个头文件 #include…… setprecision(6);cout << n; 使用setprecision(int)要用到头文件 iomanip 实参n决定保留n位小数(小数位不够会自动添0),这个函数不改变n值内存的,只是输出形式不同,另外提醒下 一旦调用了这个函数,往后的输出都会按这个原则(保留6位小数),直到下个setprecision(int)被调用【格式控制符有哪些,9 写出所有可以用于printf函数的格式控制符】
3 , scanf函数格式控制符dfc和地址指针及输本质原因在于 scanf 后面的参数是 ... 这种不定类型的,因此scanf不知道这些变量的实际类型,需要额外告诉它,而%d %f就是来做这个事情.scanf在拿到这些变量后,会根据前面的%d %f做强制类型转换,然后处理,如果%d %f和实际定义的变量不一致,scanf就会做错误的类型转换,最后自然得到错误的结果.对于 &a, 是因为C/C++的函数的参数是传值的,也就是说如果直接传a给scanf, 它是没办法修改a的值的, 为了让scanf能够根据输入修改a的值, 必须传a的地址, 就是 &a首先操作系统会将你的输入当成字符串先做一个缓存 , 无论你输入的是什么;然后启动相应的转换程序,将你的字符串转换成你的格式符修饰的类型的数据,这个转换是机械的,不做过多的判断 。那么如果这部出错(比如%d时你输入大于int型数据范围的数)由编程者和输入者负责(可以通过更好的程序设计或通过详细的提示避免) 。转换完成后的数据(按照你指定的类型)由操作系统存放到你后面的指针中去,不判断指针是否与数据类型是否匹配,这步如果不匹配将会导致意外问题 。1)在16位的CPU中,整数是用两个字节,也就是16个二进制位表示的, 用补码表示的话, 范围就是-32768到32767. 所以,当你输入的数据超出这个范围时, 内部将无法正确表示这个数. 此时具体结果如何,和编译器产品的设计有关.总之, 不会有正确结果出现. 在日常生活中,如果一个本子上只有两个格,你就无法往里写三位数. 只是,具体int是两个字节还是四个字节或更多字节,不仅取决于CPU,还和编译器有关,2) 浮点数有特殊的表示格式,这个格式是有国际标准的. 和整数的格式完全不同.比如, 数字2.0的标准内部4字节表示为 0x000x00 0x00 0x40.程序语句scanf("%d", &b)编译后在执行时, CPU把输入的字符串, 比如"2",按其中"%d"的指示转换成整数,也就是0x02 0x00,而正确的结果应该是在b的位置存入0x00 0x00 0x00 0x40,因此当使用变量b时, 按最初变量定义, 它是浮点数,用浮点数的计算方法, 这样, 以后b不论显示还是参与计算都是错的.这里不光是数据错误,由于不同变量内部表示长度不同,scanf("%f", &a), 转换结果时, 还会影响到变量a后面的空间的数值.导致更复杂的结果.3) double 的内部长度多于4个字节,在scanf中误用格式串也存在 2)中所述问题.定义类型如:int a,实际上就是给a分配栈空间,在计算机中任何数据都是以01格式存储在存储介质中 。这里所用的介质当然是内存条 。int a和 char a在电脑看来没什么不一样,就是长度的问题,编译的时候这两者混用可以通过,大不了就是一个截断问题,但是int和浮点类型就不一样了,比如float类型,它的内存里的数据 , 一部分代表正负,一部分代表指数.... 。“&”是取地址,比如&a,就是取前面int a时,系统为a分配的那个栈地址,这是scanf()函数的实现方法决定的,(有兴趣可以看一下库函数里的源代码),它和格式控制符没有关系,如果你不用&会有什么后果?答案是:很严重,因为你访问了一个不可预知的地址(a的值,没有初始化就是一个随机值),轻则程序崩溃,严重的会影响系统(但是一般系统都是有内存保护的,外部一般没有访问权限) 。建议楼主看一下各种数据类型的内存结构,以及系统为一个程序分配的空间:常量区、堆栈区.......
4,C语言整型的格式控制符%i的意思是有符号整型的意思,实质上和%d是一个意思来的 。只管使用%d就好啦 。printf的格式控制的完整格式:%-0m.nl或h格式字符下面对组成格式说明的各项加以说明:①%:表示格式说明的起始符号,不可缺少 。②-:有-表示左对齐输出,如省略表示右对齐输出 。③0:有0表示指定空位填0,如省略表示指定空位不填 。④m.n:m指域宽,即对应的输出项在输出设备上所占的字符数 。n指精度 。用于说明输出的实型数的小数位数 。为指定n时 , 隐含的精度为n=6位 。⑤l或h:l对整型指long型 , 对实型指double型 。h用于将整型的格式字符修正为short型 。---------------------------------------格式字符格式字符用以指定输出项的数据类型和输出格式 。①d格式:用来输出十进制整数 。有以下几种用法:%d:按整型数据的实际长度输出 。%md:m为指定的输出字段的宽度 。如果数据的位数小于m,则左端补以空格,若大于m , 则按实际位数输出 。%ld:输出长整型数据 。②o格式:以无符号八进制形式输出整数 。对长整型可以用"%lo"格式输出 。同样也可以指定字段宽度用“%mo”格式输出 。例:main()printf("%d, %o", a, a);}运行结果:-1,177777程序解析:-1在内存单元中(以补码形式存放)为(1111111111111111)2 , 转换为八进制数为(177777)8 。③x格式:以无符号十六进制形式输出整数 。对长整型可以用"%lx"格式输出 。同样也可以指定字段宽度用"%mx"格式输出 。④u格式:以无符号十进制形式输出整数 。对长整型可以用"%lu"格式输出 。同样也可以指定字段宽度用“%mu”格式输出 。⑤c格式:输出一个字符 。⑥s格式:用来输出一个串 。有几中用法%s:例如:printf("%s", "china")输出"china"字符串(不包括双引号) 。%ms:输出的字符串占m列 , 如字符串本身长度大于m,则突破获m的限制,将字符串全部输出 。若串长小于m,则左补空格 。%-ms:如果串长小于m,则在m列范围内 , 字符串向左靠,右补空格 。%m.ns:输出占m列,但只取字符串中左端n个字符 。这n个字符输出在m列的右侧,左补空格 。%-m.ns:其中m、n含义同上,n个字符输出在m列范围的左侧 , 右补空格 。如果n>m,则自动取n值,即保证n个字符正常输出 。⑦f格式:用来输出实数(包括单、双精度),以小数形式输出 。有以下几种用法:%f:不指定宽度 , 整数部分全部输出并输出6位小数 。%m.nf:输出共占m列,其中有n位小数 , 如数值宽度小于m左端补空格 。%-m.nf:输出共占n列,其中有n位小数,如数值宽度小于m右端补空格 。⑧e格式:以指数形式输出实数 。可用以下形式:%e:数字部分(又称尾数)输出6位小数,指数部分占5位或4位 。%m.ne和%-m.ne:m、n和”-”字符含义与前相同 。此处n指数据的数字部分的小数位数,m表示整个输出数据所占的宽度 。⑨g格式:自动选f格式或e格式中较短的一种输出,且不输出无意义的零 。---------------------------------------关于printf函数的进一步说明:如果想输出字符"%",则应该在“格式控制”字符串中用连续两个%表示,如:printf("%f%%", 1.0/3);输出0.333333% 。---------------------------------------对于单精度数,使用%f格式符输出时 , 仅前7位是有效数字,小数6位.对于双精度数,使用%lf格式符输出时,前16位是有效数字 , 小数6位.对于m.n的格式还可以用如下方法表示(例)char ch[20];printf("%*.*s\n",m,n,ch);前边的*定义的是总的宽度 , 后边的定义的是输出的个数 。分别对应外面的参数m和n。我想这种方法的好处是可以在语句之外对参数m和n赋值,从而控制输出格式我自己敲过格式符的代码,给你看看吧:5,求C的调整输出格式用的所有操控符深圳#include <iomanip> 这里面iomanip的作用比较多: 主要是对cin,cout之类的一些操纵运算子,比如setfill,setw,setbase,setprecision等等 。它是I/O流控制头文 件,就像C里面的格式化输出一样.以下是一些常见的控制函数的: dec 置基数为10 相当于"%d" hex 置基数为16 相当于"%X" oct 置基数为8 相当于"%o" setfill(c) 设填充字符为c setprecision(n) 设显示小数精度为n位 setw(n) 设域宽为n个字符 这个控制符的意思是保证输出宽度为n 。如: cout<<setw(3)<<1<<setw(3)<<10<<setw(3)<<100; 输出结果为 1 10100 (默认是右对齐)当输出长度大于3时(<<1000),setw(3)不起作用 。setioflags(ios::fixed) 固定的浮点显示 setioflags(ios::scientific) 指数表示 setiosflags(ios::left) 左对齐 setiosflags(ios::right) 右对齐 setiosflags(ios::skipws 忽略前导空白 setiosflags(ios::uppercase) 16进制数大写输出 setiosflags(ios::lowercase) 16进制小写输出 setiosflags(ios::showpoint) 强制显示小数点 setiosflags(ios::showpos) 强制显示符号 举例: #include <iostream> #include <iomanip> using namespace std; int main() cout<<12345.0<<endl;//输出"12345" cout<<setiosflags(ios::fixed)<<setprecision(3)<<1.2345<<endl;输出"1.235" cout<<setiosflags(ios::scientific)<<12345.0<<endl;//输出"1.234500e+004 " cout<<setprecision(3)<<12345.0<<endl;//输出"1.235e+004 " return 0; }对于流数据的输入输出格式,C++提供了两种不同的控制方式,一种是使用ios_base类提供的setf、width等函数设置输入输出格式,另一种是通过重载的格式控制符“<<”、“>>”以及流格式控制对象进行设置 。只介绍:用函数设置或者恢复格式大部分流的输入输出格式可以用setf函数来设置 。对于流数据的输入输出格式,C++提供了两种不同的控制方式 , 一种是使用ios_base类提供的setf、width等函数设置输入输出格式,另一种是通过重载的格式控制符“<<”、“>>”以及流格式控制对象进行设置 。只介绍:用函数设置或者恢复格式大部分流的输入输出格式可以用setf函数来设置 。该函数有两种重载形式 。其但参数的setf原型为fmtflage setf(fmtfalg flag)参数flag说明所要设置的格式,由ios_base给出,可取如下枚举常量:enumleft=0x0001,//在域中靠左输出right=0x0002,//在域中靠右输出internal=0x0004,//符号靠左数值靠右输出,中间默认以空格填充dec=0x0008,//数值以十进制输出hex=0x0010,//以16进制输出oct=0x0020,//8进制输出fixed=0x0040,//浮点数以小数方式输出scientific=0x0080,//浮点数以科学计数方式输出boolalpha=0x0100,//布尔值以true/false方式输出showbase=0x0200,//8进制前面加0做指示符,16进制前面加0x做指示符showpoint=0x0400,//不管小数点和尾部的0是否可省略不写,都输出小数点和0showpos=0x0800,//在正数前面输出+号skipws=0x1000,//不读入空白字符(空格,制表符“t,回车“r,和换行“n)unitbuf=0x2000,//每次写入数据都刷新到相应设备uppercase=0x4000,//科学计数法的"e"和16进制计数的"x",大写输出为"E"和"X"adjustfield=left | right | internal,//一般用作对齐方式的屏蔽码basefield=dec | hex | oct,//一般用作数值进制输出方式的屏蔽码floatfield=scientific | fixed//一般用作浮点数输出方式的屏蔽码};一般用派生类ios作前缀”ios::”使用以上枚举值.Setf函数的另一个使用原型如下:Fmtflags setf(fmtflags flag,fmtflags mask)其中第二个函数mask为隐码格式.例如设置adjustfield,basefield和floatfield格式.组成隐码格式的所有格式会首先被复位,然后用第一个参数flag去设置新格式.对于setf函数设置的格式,可用unsetf函数进行复位.下面是他的原型,参数mask为所要复位的格式.Void unsetf(fmtflags mask)下面程序使用setf/unsetf函数对内建的cout流进行格式设置和复位.#include <iostream>using namespace std;int main(void)//科学计数方式显示,大写Ecout.setf(ios::scientific | ios::uppercase);cout<<2006.5<<endl;//输出2.0065E+03//下面的showpos不起作用,不会显示出"+"号cout.setf(ios::floatfield,ios::fixed | ios::showpos);cout<<2006.5<<endl;//输出2006.5//显示"+"号cout.setf(ios::showpos);cout<<2006.5<<endl;//输出+2006.5return 0;}对于流的其他格式,如输出的最小宽域、数值精度以及填充字符的格式设置,可以使用ios_base类提供的width和precision函数,以及ios类提供的fill函数.Width函数用newwidth设置新的最小域宽,如果输出不足以占满整个域,会补充适当的前导空格或者前导0.Streamsize width(streamsizenewwidth)默认的数值精度为6位有效数字,可用precision函数将参数newprecision设置为新的精度值,数值输出时会按这个精度进行必要的四舍五入.Streamsizeprecision(streamsize newprecision)默认的填充字符为空格字符,可以用fill函数将参数fill_char字符设置为填充字符Char_typefill(char_type fill_char)下面示例程序对cout流进行了域宽、精度和填充字符等流格式进行了设置 。#include <iostream>using namespace std;int main(void)cout.width(20);cout<<"hello"<<endl;//右对齐输出hello,占20字符cout.precision(4);cout<<2009.228<<endl;//输出2009cout.precision(5);cout<<2009.228<<endl;//输出2009.2cout.precision(7);cout<<2009.228<<endl;//输出2009.228cout.width(20);cout.fill(*);cout<<"baby"<<endl;//输出"****************baby"return 0;}或者给你几个参考网址:C++输出格式http://apps.hi.baidu.com/share/detail/25003454C++输出格式控制http://edu.21cn.com/ncre/g_51_351376-1.htm

    推荐阅读