C++ 标准库通过 <iostream> 提供与终端交互的流对象:std::cin 从标准输入读取,std::cout 向标准输出写入,std::cerr 常用于错误信息。本节说明流插入与提取运算符的用法、流状态检查、常见格式化需求,以及读取字符串与数值时的注意点。
输出到标准输出
#include <iostream>
int main() {
int year = 2026;
std::cout << "Year: " << year << std::endl;
return 0;
}多个 << 可链式连接;std::endl 输出换行并刷新缓冲区。若只需换行而不立即刷新,可使用 '\n',在高频输出时略省开销:
std::cout << "Line one\n" << "Line two\n";从标准输入读取
使用 std::cin >> variable 读取数值或不含空白的单词。读取失败时流进入 fail 状态,后续读取须先 clear() 并丢弃错误输入,否则可能陷入死循环。
#include <iostream>
int main() {
int age = 0;
std::cout << "Enter age: ";
if (std::cin >> age) {
std::cout << "You entered: " << age << std::endl;
} else {
std::cerr << "invalid input\n";
}
return 0;
}读取整行:getline
读取含空格的整行文本时,在数值读取后常需忽略行尾换行,再使用 std::getline(std::cin, line)(头文件 <string>):
#include <iostream>
#include <string>
#include <limits>
int main() {
int id = 0;
std::cout << "id: ";
std::cin >> id;
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::string name;
std::cout << "name: ";
std::getline(std::cin, name);
std::cout << id << " " << name << '\n';
return 0;
}混用 operator>> 与 getline 时,留在缓冲区中的换行符常使下一次 getline 读到空行,上述 ignore 可缓解。
格式化与精度(入门)
需要控制浮点小数位数时,可使用头文件 <iomanip> 中的操纵符,例如 std::fixed 与 std::setprecision:
#include <iomanip>
#include <iostream>
int main() {
double v = 3.1415926;
std::cout << std::fixed << std::setprecision(2) << v << std::endl;
return 0;
}输出:
3.14| 操纵符(节选) | 作用 |
|---|---|
std::setw(n) | 下一字段最小宽度 |
std::setfill(c) | 填充字符 |
std::left / std::right | 对齐方式 |
命名空间 std
标准库标识符位于命名空间 std 中。教学示例中写全 std::cout 以避免与自定义名称冲突;在单文件练习中也有人使用 using std::cout;,大型工程中更推荐显式前缀或局部 using(见命名空间)。
与 C 的 printf / scanf 相比,流接口在类型不匹配时更易在编译期报错;需要与 C 库交互时仍可使用 cstdio。
本节说明了 cin、cout 的基本用法、getline 与简单的格式化输出。流对象与操纵符的逐条查阅见标准库 <iostream>。下一节介绍注释的写法与维护代码时的使用习惯。