在编写 C++ 程序时,如果我们想要把一段文字、变量的值或者算式的计算结果显示到屏幕上,最常用的方式就是使用 std::cout。其中,cout 是英文 “character output(字符输出)” 的缩写。
想要在程序中使用 std::cout,必须先在代码开头写上 #include <iostream> 来引入标准输入输出头文件。代码里的 std 是标准库的命名空间,双冒号 :: 表示去 std 里面找到 cout 这个输出工具。
std::cout 基本输出
在 C++ 中,使用 std::cout 配合双尖括号 <<,就可以把数据打印到控制台屏幕上。
语法:
std::cout << 输出内容;说明:
std::cout 表示标准输出,默认对应的就是电脑屏幕上的控制台窗口,而 << 叫做 “流插入运算符”。小伙伴们不用死记这个专业名称,顺着箭头的方向看就很好理解:<< 像一个向左指的箭头,意思就是把右边的内容顺着箭头输送给左边的 std::cout 显示出来。
示例 1:输出一段文字
#include <iostream>
int main() {
std::cout << "欢迎来到绿叶网!";
return 0;
}运行结果如下。
欢迎来到绿叶网!分析:
"欢迎来到绿叶网!" 是一个字符串字面量,std::cout 会把双引号里面的文字原样打印到屏幕上。需要注意的是,代码里的英文双引号只是用来告诉编译器这是一段字符串,最终显示在屏幕上的结果并不会包含最外层的两个双引号。
除了输出固定文字之外,std::cout 还可以直接输出变量的值或算术表达式的计算结果。下面我们来看一个例子。
示例 2:输出变量与表达式
#include <iostream>
int main() {
int pages = 120;
std::cout << pages << '\n';
std::cout << 10 + 20;
return 0;
}运行结果如下。
120
30分析:
第一条输出语句读取了整型变量 pages 的值 120 并打印出来,末尾的 '\n' 是上一节学过的转义字符,写成 "\n" 也能同样起到换行的作用。第二条语句 std::cout << 10 + 20; 则会先算出 10 + 20 的结果 30,再把 30 打印到屏幕上。
初学的小伙伴在输出变量时,很容易在变量名外面误加上双引号。下面这种写法虽然不会报错,但编译器会把 "pages" 当成普通字符串,直接在屏幕上原样打印出字母 pages,而不是变量保存的数值 120:
int pages = 120;
std::cout << "pages"; // 原样输出字母 pages连续输出多项内容
在实际开发中,我们经常需要把提示文字、变量的值或者多个不同类型的数据组合在同一行输出。此时可以在一条 std::cout 语句中连续使用多个 <<。
语法:
std::cout << 内容1 << 内容2 << 内容3;说明:
当一条语句中包含多个 << 时,std::cout 会按照从左到右的顺序,把每一项内容依次紧挨着输出到屏幕上。
示例 3:拼接文字与变量
#include <iostream>
int main() {
int year = 2026;
std::cout << "Year: " << year;
return 0;
}运行结果如下。
Year: 2026分析:
程序按从左到右的顺序依次执行:先输出字符串 "Year: ",再紧跟在后面输出变量 year 的值 2026,从而把提示文字和变量值拼在同一行显示。
需要注意的是,std::cout 在连续输出多项内容时,中间不会自动添加空格。上面代码之所以能显示出 Year: 2026,是因为我们在字符串 "Year: " 的冒号后面主动留了一个空格。如果写成 "Year:",输出结果就会紧贴在一起变成 Year:2026。
示例 4:输出多种类型的数据
#include <iostream>
int main() {
int count = 5;
double price = 19.8;
char level = 'A';
bool isPassed = true;
std::cout << count << ' ' << price << ' ' << level << ' ' << isPassed;
return 0;
}运行结果如下。
5 19.8 A 1分析:
在这个例子中,std::cout 自动识别了 int、double、char、bool 等不同的数据类型,不需要像 C 语言 printf() 那样手动填写格式符,直接通过 << 串联就能依次输出。其中,布尔值 true 默认会打印为数字 1。
由于多项内容之间不会自动留间隔,我们在相邻变量中间插入了空格字符 ' ',当然写成双引号字符串 " " 也可以。如果希望进一步控制小数保留位数或列对齐宽度,可以配合输出格式化工具来实现。
提示 如果希望 std::cout 直接把布尔值打印成英文单词 true 和 false,而不是默认的数字 1 和 0,可以在输出前加上一句 std::cout << std::boolalpha;。这里简单了解一下即可。
输出换行:\n 与 std::endl
std::cout 在输出完内容后,默认不会自动换行。哪怕我们在代码里分成两行写两条 std::cout 语句,只要没有明确输出换行,屏幕上的文字依然会紧贴在同一行显示。
在 C++ 中,想要让输出结果换行,常用的有 2 种方式:一种是使用 \n,另一种是使用 std::endl。
1. 使用 \n 换行(推荐)
在日常开发中,最简单直接的换行方式就是使用转义字符 \n。如果是在一段文字末尾换行,直接把 \n 写进双引号字符串里即可。如果是在变量后面单独追加换行,既可以写成单引号字符 '\n',也可以写成双引号字符串 "\n"。
示例 5:使用 \n 实现换行
#include <iostream>
int main() {
int year = 2026;
std::cout << "欢迎来到绿叶网!\n";
std::cout << "Year: " << year << '\n';
std::cout << "开始学习 C++";
return 0;
}运行结果如下。
欢迎来到绿叶网!
Year: 2026
开始学习 C++分析:
每当 std::cout 遇到 \n 时,光标就会移到下一行的开头,后面的内容自然从新的一行开始显示。对于这个例子来说,如果把第一句末尾的 \n 去掉,前两条语句的输出就会首尾紧贴在同一行,变成 欢迎来到绿叶网!Year: 2026。
在变量后面单独追加换行时,写 '\n' 和 "\n" 的显示效果完全相同。不过 '\n' 是单个字符,处理起来更轻量,因此在变量末尾单独追加换行时,我们更推荐写单引号的 '\n'。如果换行本来就跟在文字末尾,直接把 \n 写进双引号字符串里最省事。
2. 使用 std::endl 换行
除了 \n 之外,我们在阅读其他 C++ 代码或教材时,也经常会看到使用 std::endl 来换行。其中,endl 是英文 “end line(结束当前行)” 的缩写。
需要注意的是,std::endl 是 C++ 标准库提供的一个换行控制工具,并不是普通的字符或字符串,因此使用时外面不能加单引号或双引号,直接写在 << 后面即可。
示例 6:使用 std::endl 实现换行
#include <iostream>
int main() {
std::cout << "First line" << std::endl;
std::cout << "Second line" << std::endl;
return 0;
}运行结果如下。
First line
Second line分析:
从运行结果可以看出,std::endl 和 \n 都能让光标移到下一行开头。不过它们在底层的执行动作有以下区别:
- \n:只负责让输出换到下一行,执行效率更高。
- std::endl:除了让输出换行之外,还会强制刷新 “输出缓冲区”,也就是把内存中临时暂存的内容立即推送到屏幕上,频繁调用会降低输出速度。
在实际开发中,如果只是需要普通的换行,我们优先使用 \n 就可以了。同时小伙伴们要注意,千万不要把 \n 和 std::endl 的引号规则搞混:
// 正确方式
std::cout << "Hello\n";
std::cout << "Hello" << '\n';
std::cout << "Hello" << std::endl;
// 错误方式
std::cout << "std::endl";上面错误方式中给 std::endl 加上了双引号,编译器会把它当成普通字符串,直接在屏幕上原样打印出 std::endl 这几个字符,而不会换行。
