C++中的 cout 和 printf 用法


前言

C++是一种面向对象的编程语言,它继承了C语言的特点,同时也增加了许多新的特性。在C++中的cout 和 printf是两种常用的输出函数,它们都可以将数据显示在屏幕上,但是它们也有一些区别和优缺点。本文将详细说明这两种函数的区别及格式化输出的不同实现方法。

cout & printf

cout 是C++标准库中的一个对象,它属于iostream头文件,它可以使用<<运算符将数据发送到标准输出流(一般就是屏幕)。cout 的优点是可以直接输出各种类型的数据,不需要指定格式符,而且可以重载<<运算符来自定义输出方式。cout 的缺点是输出速度较慢,而且不能控制输出的精度和宽度。

printf 是C语言中的一个函数,它属于stdio.h头文件,它可以使用格式化字符串将数据发送到标准输出流。printf 的优点是输出速度较快,而且可以使用各种格式符来控制输出的精度和宽度,例如%.2f表示保留两位小数,%10d表示占用10个字符的整数。printf 的缺点是需要指定格式符,而且不能直接输出C++中的一些类型,例如string和bool,需要进行类型转换或者使用其他函数。

为了实现格式化输出,cout 和 printf 有不同的方法。cout 可以使用一些控制符来修改输出流的状态,如setprecision, setw, left, right, fixed, scientific等。这些控制符可以用<<运算符连接在cout 后面,也可以用cout.setf函数来设置。

example

格式化输出是指按照一定的规则和要求将数据显示在屏幕上,例如保留小数位数,对齐方式,补充空格等。cout 和 printf都可以实现格式化输出,但是方法不同。cout 可以使用一些控制符来实现格式化输出,例如setprecision(n)表示保留n位小数,setw(n)表示占用n个字符,left表示左对齐,right表示右对齐等。这些控制符需要包含iomanip头文件,并且使用<<运算符与cout 连接。例如:

#include <iostream>
#include <iomanip>

using namespace std;
int main(){

    double x = 3.14159;
    cout << setprecision(3) << x << endl; // 输出3.14
    cout << setw(10) << x << endl;        // 输出     3.14159
    cout << left << setw(10) << x << endl; // 输出3.14159
    cout << right << setw(10) << x << endl; // 输出     3.14159
    return 0;
}

printf 可以使用格式化字符串来实现格式化输出,格式化字符串由普通字符和格式符组成,普通字符原样输出,格式符用来指定数据的类型和格式。格式符的一般形式为%[标志][宽度][.精度][长度]类型。例如:

#include <stdio.h>

int main(){

	double pi = 3.1415926;
	printf("pi = %f\n", pi); //默认输出
	printf("pi = %.3f\n", pi); //设置精度为3
	printf("pi = %10f\n", pi); //设置宽度为10
	printf("pi = %-10f\n", pi); //设置左对齐
	printf("pi = %10.3f\n", pi); //设置宽度为10,精度为3
	printf("pi = %e\n", pi); //设置科学计数法
	return 0;
}

printf输出string字符串

C++中的string类型是一个类,它封装了一些字符串操作的方法。如果要用printf输出string类型的字符串,需要先将其转换为C风格的字符串,即以’\0’结尾的字符数组。有两种方法可以实现这种转换:

  • 使用string类的c_str()方法,它会返回一个const char*指针,指向string对象内部存储的字符串。例如:
#include <iostream>
#include <string>
using namespace std;

int main()
{
string s = "Hello, world!";
printf("%s\n", s.c_str()); // 输出Hello, world!
return 0;
}
  • 使用string类的data()方法,它也会返回一个const char*指针,指向string对象内部存储的字符串。但是,这个指针不一定以’\0’结尾,所以需要额外指定输出的长度。例如:
#include <iostream>
#include <string>
using namespace std;

int main()
{
string s = "Hello, world!";
printf("%.*s\n", s.size(), s.data()); // 输出Hello, world!
return 0;
}

总结

cout 和 printf 都是C++中常用的输出方式,它们各有优缺点,具体使用哪一种要根据实际情况和需求来选择。在一般情况下,如果不需要高效或精确地控制输出格式,可以使用cout 来简化编程;如果需要高效或精确地控制输出格式,可以使用printf 来提高性能。

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无证的攻城狮

如本文对您有用,大爷给打个赏!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值