C/C++ printf/cout格式化输出相关合集

 

格式控制符 流操作算子

当需要输出浮点数时保留小数点后面几位数,以十六进制输出整数,输出整数时按几个数字的宽度输出,宽度不足时左边(默认)/右边补“0”,等等。C语言中的 printf() 函数使用以%开头的格式控制符,例如 %X、%d、%lf、%.6f、%6d 等(相关:"printf"和"wprintf"规范 | Microsoft Docs);C++中的 cout 对象则使用格式控制符(流操作算子)或者成员函数进行控制。


使用格式控制符(.c)

C

RUN

C++

RUN

流操纵算子可以用来干什么?

注意

         使用流操作算子        

关于SETW


使用格式控制符(.c)

控制符 作用
%d 用来输出有符号的十进制整数(包括char类型 char是字符指针数据类型)
%u 用来输出无符号的十进制整数(包括char类型)
%o 用来输出无符号的八进制整数oct
%x 用来输出无符号的十六进制整数hex
%c 用来输出单个字符
%s 用来输出一个字符串
%f 用来输出小数形式的十进制浮点数(输入时小数形式和指数形式都可以识别)注意double用%lf输出
%e 用来输出指数形式的十进制浮点数(输入时小数形式和指数形式都可以识别)
%g 用来输出指数形式和小数形式两者中较短的十进制浮点数(输入时小数形式和指数形式都可以识别)
%  [-]  [0] [m/m.n][l/h] 其中[ ]里面的内容是可选的 控制:左对齐、补齐、宽度、长短型、浮点精度

      -:表示左对齐,缺省情况下为右对齐(若没规定输出数据的宽度则为左对齐)。
     0:当规定输出数据的宽度时,所输出数据实际的宽度小于规定的宽度,则在左边用“0”补齐。
     m/m.n:m规定了输出数据的宽度(位数),若数据实际的宽度大于m,则突破m的限制全部输出,反之, 将数据全部输出之后用空格进行左补齐;对于实数n是指小数点后的位数,若n小于小数点后实际的位数,则按四舍五入原则进行截取;对于字符串,n表示从左至右截取的字符个数。
     l/h:l表示长整型数据(可用于%ld。%lo,%lx,%lu),以及double型数据(%lf或%le);h表示短整型数据(可用于%hd。%ho,%hx)。
     f表示的浮点数精度为6, 若浮点数的实际小数位长大于6,则截取6位,第7位四舍五入;若浮点数的实际小数位数小于6,则后补0。如    1.23转换成1.230000;1.23456789转换成1.234568。

C

#include
int main()
{
    double eg=123.456;
    printf("1)%f\n",eg);
    printf("2)%e\n",eg);
    printf("3)%g\n",eg);
    printf("4)%lf\n",eg);
    printf("5)%2f\n",eg);
    printf("6)%4f\n",eg);
    printf("7)%10f\n",eg);
    printf("8)%12f\n",eg);
    printf("9)%22f\n",eg);
    printf("10)%22.2f\n",eg);
    printf("11)%22.6f\n",eg);
    printf("12)%-22f\n",eg);
    printf("13)%022f\n",eg);
    printf("%");//无效
    printf("文字和%");//无效
    printf("文字和%%");//有效
    printf("\n");
    printf("%%");//输出%写法
    printf("\n");
    printf("%%%%");//输出三个%
    return 0;
}

RUN

1)123.456000
2)1.234560e+002
3)123.456
4)123.456000
5)123.456000
6)123.456000
7)123.456000
8)  123.456000
9)            123.456000
10)                123.46
11)            123.456000
12)123.456000
13)000000000000123.456000
文字和文字和%
%
%%


C++

#include 
#include
using namespace std;
//进制算法https://blog.csdn.net/hcmony/article/details/75530067
int main()
{
    cout << "Hello world!" << endl;
    cout<
//这是c的进制转换

int main()
{
	printf("%#c,%#d,%#u\n", 'A', 99, 00);
	printf("%#o\n", 10); // o 八进制 12
	printf("%#x\n", 10); // ox 十六进制 a
/*#控制前导显示*/

	return 0;
} 

C的进制转换结果

A,99,0
012
0xa

 

RUN

需要注意的是,setw() 算子所起的作用是一次性的,即只影响下一次输出。每次需要指定输出宽度时都要使用 setw()。因此可以看到,第 9) 行的输出因为没有使用 setw(),输出的宽度就不再是前面指定的 12 个字符。

Hello world!
12.3
123567.890
1.236e+005
0001020
11
 十进制 :d=16 b=10 c=11
十六进制:d=16 b=10 c=11
 八进制 :d=26 b=20 c=21
1)8d 141 215
2)1.23457e+006 1.23457e+001
3)1234567.89000 12.34567
4)1.23457e+006 1.23457e+001
5)***+12.10000
6)12.10000****
7)****12.10000
8)-***12.10000
9)12.10000

 

流操纵算子可以用来干什么?

  • 设置整数的进制(hex 16进制dec 10进制(默认)otc 8进制)
  • 设置浮点数的精度(setprecision)    setprecision(streamsize Prec);
  • 设置域宽(setw)    setw(streamsize Wide);
  • 设置对齐格式等(左对齐、右对齐等)  
    cout<
  • 其它功能及自定义流操纵算子(待补充)

注意

使用流操纵算子需要 #include  #include

 库使用 #include #include #include  和 #include  语句。

iomanip相关内容(MicrosoftDocs) 函数

 

使用流操作算子

C++ 中常用的输出流操纵算子如表 1 所示,它们都是在头文件 iomanip 中定义的;要使用这些流操纵算子,必须包含该头文件。

注意:“流操纵算子”一栏中的星号*不是算子的一部分,星号表示在没有使用任何算子的情况下,就等效于使用了该算子。例如,在默认情况下,整数是用十进制形式输出的,等效于使用了 dec 算子。

C++ 流操纵算子
流操纵算子 作  用
*dec 以十进制形式输出整数 常用
hex 以十六进制形式输出整数
oct 以八进制形式输出整数
fixed 以普通小数形式输出浮点数
scientific 以科学计数法形式输出浮点数
left 左对齐,即在宽度不足时将填充字符添加到右边
*right 右对齐,即在宽度不足时将填充字符添加到左边
setbase(b) 设置输出整数时的进制,b=8、10 或 16
setw(w) 指定输出宽度为 w 个字符,或输人字符串时读入 w 个字符
setfill(c) 在指定输出宽度的情况下,输出的宽度不足时用字符 c 填充(默认情况是用空格填充)
setprecision(n) 设置输出浮点数的精度为 n。

在使用非 fixed 且非 scientific 方式输出的情况下,n 即为有效数字最多的位数,如果有效数字位数超过 n,则小数部分四舍五人,或自动变为科学计 数法输出并保留一共 n 位有效数字。

在使用 fixed 方式和 scientific 方式输出的情况下,n 是小数点后面应保留的位数。
setiosflags(flag) 将某个输出格式标志置为 1
resetiosflags(flag) 将某个输出格式标志置为 0
boolapha 把 true 和 false 输出为字符串 不常用
*noboolalpha 把 true 和 false 输出为 0、1
showbase 输出表示数值的进制的前缀
*noshowbase 不输出表示数值的进制.的前缀
showpoint 总是输出小数点
*noshowpoint 只有当小数部分存在时才显示小数点
showpos 在非负数值中显示 +
*noshowpos 在非负数值中不显示 +
*skipws 输入时跳过空白字符
noskipws 输入时不跳过空白字符
uppercase 十六进制数中使用 A~E。若输出前缀,则前缀输出 0X,科学计数法中输出 E
*nouppercase 十六进制数中使用 a~e。若输出前缀,则前缀输出 0x,科学计数法中输出 e。
internal 数值的符号(正负号)在指定宽度内左对齐,数值右对 齐,中间由填充字符填充。

关于SETW

在读入字符串时,setw() 还能影响 cin 的行为。例如下面的程序:

#include 
#include 
using namespace std;
int main()
{
string s1, s2;
cin >> setw(4) >> s1 >> setw(3) >> s2;
cout << s1 << "," << s2 << endl;
return 0;
}

输入:
1234567890
程序的输出结果是:
1234,567
说明setw(4)使得读入 s1 时,只读入 4 个字符,其后的setw(3)使得读入 s2 时只读入 3 个字符。
setw() 用于 cin 时,同样只影响下一次的输入。

 

你可能感兴趣的:(笔记本,c++,c语言,算法)