IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C/C++ printf/cout格式化输出相关合集 -> 正文阅读

[C++知识库]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<stdio.h>
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 <iostream>
#include<iomanip>
using namespace std;
//进制算法https://blog.csdn.net/hcmony/article/details/75530067
int main()
{
    cout << "Hello world!" << endl;
    cout<<setprecision(3)<<12.2675<<endl;//有效位
    double a=123.56789;
    cout<<fixed<<setprecision(3)<<a*1000<<endl;//小数点后
    cout<<scientific<<setprecision(3)<<a*1000<<endl;//科学计数
    cout<<setfill('0')<<setw(5)<<10<<20<<endl;//填充设置长
    cout<<hex<<17<<endl;//hex16进制,oct8进制
    int d=22,b=16,c=17;
    cout <<" 十进制 :d="<<d<<" b="<<b<<" c="<<c<< endl;
    cout <<"十六进制:d="<<hex<<d<<" b="<<b<<" c="<<c<< endl;
    cout <<" 八进制 :d="<<oct<<d<<" b="<<b<<" c="<<c<< endl;
    #include <iostream>
    int n = 141;
    //1) 分别以十六进制、十进制、八进制先后输出 n
    cout << "1)" << hex << n << " " << dec << n << " " << oct << n << endl;
    double x = 1234567.89, y = 12.34567;
    //2)保留5位有效数字
    cout << "2)" << setprecision(5) << x << " " << y << " " << endl;
    //3)保留小数点后面5位
    cout << "3)" << fixed << setprecision(5) << x << " " << y << endl;
    //4)科学计数法输出,且保留小数点后面5位
    cout << "4)" << scientific << setprecision(5) << x << " " << y << endl;
    //5)非负数显示正号,输出宽度为12字符,宽度不足则用 * 填补
    cout << "5)" << showpos << fixed << setw(12) << setfill('*') << 12.1 << endl;
    //6)非负数不显示正号,输出宽度为12字符,宽度不足则右边用填充字符填充
    cout << "6)" << noshowpos << setw(12) << left << 12.1 << endl;
    //7)输出宽度为 12 字符,宽度不足则左边用填充字符填充
    cout << "7)" << setw(12) << right << 12.1 << endl;
    //8)宽度不足时,负号和数值分列左右,中间用填充字符填充
    cout << "8)" << setw(12) << internal << -12.1 << endl;
    cout << "9)" << 12.1 << endl;
    return 0;
}

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<<left<<setfill('0')<<setw(5)<<123;
    //输出为 12300
  • 其它功能及自定义流操纵算子(待补充)

注意

使用流操纵算子需要?#include <iostream>?#include <iomanip>

<iostream>?库使用?#include <ios>#include <streambuf>#include <istream>?和?#include <ostream>?语句。

iomanip相关内容(MicrosoftDocs)<iomanip> 函数

使用流操作算子

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 <iostream>
#include <iomanip>
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++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-09-15 01:47:57  更:2022-09-15 01:49:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:33:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码