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

控制台(console)就是那个黑窗口——程序在这里读键盘、写屏幕。它同时管着三条通道:标准输入 cin(键盘)、标准输出 cout(屏幕)、标准错误 cerr(屏幕,但单独一条线)。三条通道分开不是摆设:正常消息和错误消息可以被分别收集(重定向到不同文件)。入门阶段学的都是控制台程序——它简单、把注意力留给逻辑。

一、控制台是什么

┌────────────────────────────┐
│ C:\Dev-Cpp\hello.exe       │  ← 标题栏:当前跑的程序
├────────────────────────────┤
│ 请输入两个整数:            │  ← 程序的输出(cout)
│ 7 3                        │  ← 你敲的输入(cin)
│ 和 = 10                    │  ← 输出
│ █                          │  ← 光标:等着你敲下一个
└────────────────────────────┘

"黑窗口"从哪儿来:Windows 的 cmd / PowerShell,以及 Dev-C++ 按 F9 时弹出的那个窗口——它们都是控制台。

程序类型 长什么样 例子
控制台程序 黑窗口,靠文字交互 你写的 C++ 小程序、ping、dir
窗口程序(GUI) 有按钮、菜单、图片 记事本、浏览器、AutoCAD

为什么入门先学控制台:不用管按钮、窗口、鼠标——能把全部注意力放在"数据怎么进来、结果怎么出去"。等逻辑和类型都熟了,再去学图形界面(那是另一个大领域)。

二、三条通道各管什么

通道 对象 方向 用途
标准输入 cin 键盘 → 程序 读用户输入
标准输出 cout 程序 → 屏幕 正常结果
标准错误 cerr 程序 → 屏幕 错误消息(不缓冲)
标准日志 clog 程序 → 屏幕 日志(缓冲)

为什么把"错误"单列一条:因为使用者需要区分——

三、重定向:把输出接到别处

控制台程序的输出默认去屏幕,但你可以"改道":

.\io.exe > out.txt           # 正常输出写进 out.txt(屏幕上就看不到了)
.\io.exe 2> err.txt          # 只把错误输出写进 err.txt
.\io.exe > all.txt 2>&1      # 两条都写进 all.txt
.\io.exe >> out.txt          # 追加,不覆盖
echo 7 3 | .\io.exe          # 用管道喂输入,全自动

这不是 C++ 的特性,而是所有控制台程序的通用机制——你的程序不需要为它写任何代码。

什么时候真用得上:批量跑程序、把结果存下来做对比、写自动化脚本(服务器课里的"任务计划看运行结果"就是这套思路)。

四、动手 Demo:把输出接进文件

  1. 用 2.5 写的 io.cpp,F11 编译(注意别按 F9,我们要用命令行)
  2. 打开 PowerShell,进入工程目录:
cd D:\Dev-Cpp\你的工程目录
echo 7 3 | .\io.exe > result.txt
type result.txt

看到什么算成功:type 出来的内容就是你程序的完整输出(含提示语与三个结果)——一行都没显示在屏幕上,全进文件了。

30 秒实验:把 echo 7 3 | 去掉,直接 .\io.exe > result.txt,会发现程序卡住不动——因为它在等键盘输入,而输出已经被接到文件里了。按 Ctrl+C 结束它。这个实验说明:输入输出都是可以"改道"的,程序本身完全无感。

五、常见误区

  1. "Dev-C++ 里 F9 弹出的窗口就是程序本身"——那只是承载程序的容器。程序是 .exe,控制台是它的"外衣"
  2. "重定向后屏幕上什么都没有,是不是程序坏了"——是正常的。输出去文件了,屏幕上自然看不到
  3. "中文输出乱码是 C++ 的 bug"——是编码不一致:源文件是 UTF-8,控制台默认用的是本地编码(中文 Windows 上常见 GBK)。统一编码(或 chcp 65001 切到 UTF-8)就好
  4. "控制台程序太简陋、不实用"——大量真实工具都是控制台程序(编译器、Git、服务器上的运维脚本、构建工具)。它是最"能干活"的形态
自测三问(点开对答案) 1. 控制台的三条通道分别是什么?——标准输入 `cin`、标准输出 `cout`、标准错误 `cerr`(外加日志 `clog`)。 2. 怎么把程序的输出存进文件?——用重定向:`.\程序.exe > out.txt`;错误单独存用 `2> err.txt`。 3. 中文在控制台乱码,最可能的原因?——**编码不一致**(源文件/控制台用了不同的字符编码)。

相关笔记