🔷 第二章 C++语言基础
📄 一句话概括

输入输出(I/O)=程序与外界交换数据。C++ 的做法是把它想象成"水流":键盘的数据流进程序(cin >>),程序的结果流到屏幕(cout <<),错误信息另有通道(cerr)。两个运算符的方向就是数据流向:>> 把数据"抽"进变量,<< 把数据"推"出去。本章三小节:控制台屏幕(2.5.1)、流(2.5.2)、格式控制(2.5.3)。

一、为什么叫"流"

流(stream) 的比喻:数据像一条河里的水,从一端流到另一端,你只管"往河里放"或"从河里取",不用管中间怎么搬。

键盘 ──(cin)──▶ 你的程序 ──(cout)──▶ 屏幕
                    │
                    └──(cerr)──▶ 屏幕(错误信息)

为什么不用"函数"的思路(C 语言的 printf/scanf)?因为流有两个好处:

好处 说明
类型安全 你 cout << n,它自己知道 n 是什么类型;不用像 printf 那样手写 %d、%f
可扩展 你自己定义的类型(第 8 章的结构体/类)也能用 << 输出

二、两个运算符的方向

cin >> a;              // 数据从 cin 流进变量 a —— 箭头指向【变量】
cout << "Hello";       // 数据从程序流到屏幕 —— 箭头指向【屏幕】

记忆法:

可以接龙:

cin >> a >> b;                    // 连续读两个
cout << "a = " << a << "  b = " << b << endl;    // 连续输出多段

三、I/O 的标准套路

任何"要用户输入"的程序,都是这四步:

#include <iostream>
using namespace std;

int main() {
    int a, b;

    cout << "请输入两个整数(用空格分开):";   // ① 提示:说清要输什么
    cin >> a >> b;                              // ② 输入:读进来
    cout << "它们的和是:" << a + b << endl;     // ③ 处理 + 输出
    return 0;
}

四步的关键细节:

步骤 要点
① 提示 一定要有!否则用户盯着黑窗口不知道要干嘛
② 输入 多个值用空格或回车分开都行(后面 2.5.2 讲原因)
③ 输出 加 endl 换行;不加就都挤在一行
④ 结束 别忘 return 0;(2.1.6)

四、本篇三小节的路线图

小节 讲什么 你会知道
2.5.1 控制台屏幕 "黑窗口"是什么 标准输入/输出/错误三个通道,重定向
2.5.2 C++ 语言中的流 流的机制 cin/cout 怎么工作、为什么能自动识别类型
2.5.3 流输出格式控制 排版 保留几位小数、对齐、十六进制显示;外加 printf 的用法

五、动手 Demo:第一个"有交互"的程序

新建 io.cpp:

#include <iostream>
using namespace std;

int main() {
    int a, b;

    cout << "请输入两个整数(用空格分开):";
    cin >> a >> b;

    cout << "你输入的是:" << a << " 和 " << b << endl;
    cout << "和 = " << a + b << endl;
    cout << "差 = " << a - b << endl;
    cout << "积 = " << a * b << endl;
    return 0;
}

看到什么算成功:运行后窗口停在"请输入两个整数",你敲 7 3 回车,它输出和、差、积。

顺手试两个"奇怪"输入:

30 秒实验:把 cout << "请输入两个整数(用空格分开):"; 这一行删掉再运行——程序照样能跑,但你不知道要输入什么。提示语不是装饰,是体验的一部分。

六、常见误区

  1. ">> 和 << 记不清方向"——记住一句话:数据从 cin 流向变量(>> 指向变量);数据从值流向 cout(<< 指向 cout)。箭头永远指向"数据要去的地方"
  2. "cin 可以读任意格式的输入"——按目标变量的类型解析:读 int 时遇到字母就失败。输入校验是必须的(第 4 章)
  3. "输出不加 endl 也一样"——不换行,所有输出会挤在同一行。大多数时候你要加 endl
  4. "输入提示可有可无"——对程序运行没影响,对使用者影响巨大。写给自己用的小工具也要提示
自测三问(点开对答案) 1. `>>` 和 `<<` 分别用在哪、方向是什么?——`cin >> 变量`(数据抽进变量)、`cout << 值`(数据推到屏幕)。 2. 有交互的程序,标准四步是什么?——**提示 → 输入 → 处理 → 输出**(外加最后的 `return 0`)。 3. 为什么 C++ 用"流"而不是 C 的 `printf`?——**类型安全**(不用手写格式符)且**可扩展**(自定义类型也能 `<<`)。

相关笔记