正确使用 std::cin 和 std::cout
使用标准流处理输入和输出,并避免常见问题。
正确使用 std::cin 和 std::cout 是 CoddyKit 上的免费 C++ Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 C++ Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 C++ Academy 课程共包含 4 节课。
iostream 头文件
std::cin 和 std::cout 都是来自 <iostream> 头文件的对象。它们表示终端的标准输入流和标准输出流。
使用 std::cout 输出
使用 << 将值传入 std::cout。只要某种类型有 operator<< 重载,就可以使用这种方式,包括所有内置类型和 std::string。
int age = 30;
std::string name = "Ada";
std::cout << "Name: " << name << ", Age: " << age << "\n";使用 std::cin 输入
使用 std::cin >> variable 读取值。空白字符会分隔各个标记。
int age;
std::string name;
std::cout << "Enter name and age: ";
std::cin >> name >> age;
std::cout << name << " is " << age << "\n";跳过空白字符
默认情况下,>> 会在读取前跳过开头的空白字符(空格、制表符和换行符)。这通常正是您需要的行为,但读取单个字符时请特别注意。
读取整行
std::cin >> name 只能读取一个单词。要读取包含空格的一整行,请使用 std::getline。
std::string line;
std::getline(std::cin, line);
std::cout << "You said: " << line;混用 >> 和 getline:常见错误
执行 std::cin >> n 后,换行符仍留在缓冲区中。下一次调用 getline 时会读取到空字符串。请先清除这个换行符。
int n;
std::cin >> n;
std::cin.ignore(); // consume the leftover newline
std::string line;
std::getline(std::cin, line);流状态
流有多个状态位:good、eof、fail 和 bad。提取操作后,请使用 if (std::cin) 检查流是否仍可用。
检测 EOF
在 Unix 上,文件结束由 Ctrl+D 发出信号;在 Windows 上则由 Ctrl+Z 发出信号。请在流状态正常时循环,以处理所有输入。
int n;
while (std::cin >> n) {
std::cout << n * 2 << "\n";
}竞赛代码中的更快输入输出
在竞赛编程中,请禁用与 C 标准输入输出的同步,以加快读取速度。同时解除 cin 与 cout 的绑定。
std::ios_base::sync_with_stdio(false);
std::cin.tie(nullptr);再次比较 std::endl 与 \n
std::endl 会写入换行符并刷新缓冲区。"\n" 只会写入换行符。在循环中请使用 "\n",以保持较高的性能。
手动刷新
如果需要在不写入换行符的情况下刷新缓冲区,请使用 std::flush。这对于进度指示器很有用。
for (int i = 0; i < 100; ++i) {
std::cout << "\r" << i << "%" << std::flush;
// ... work ...
}快速检查
在输出中,std::endl 和 "\n" 有什么区别?
回顾
使用 std::cout 和 << 输出内容,使用 std::cin 和 >> 读取标记。要读取整行,请使用 std::getline;在读取数字后,请使用 cin.ignore() 清除遗留的换行符。
常见问题解答
「正确使用 std::cin 和 std::cout」课时是免费的吗?
是的 — 「正确使用 std::cin 和 std::cout」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 C++ Academy 课程的其余内容,请升级到 CoddyKit PRO。 C++ Academy 课程共包含 4 节课。
「正确使用 std::cin 和 std::cout」这节课中我会学到什么?
使用标准流处理输入和输出,并避免常见问题。 你通过在浏览器中直接运行的动手代码来练习 C++ Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 C++ Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 C++ Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「正确使用 std::cin 和 std::cout」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 C++ Academy 课中编写并运行代码吗?
能。每节 C++ Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 正确使用 std::cin 和 std::cout
- 使用 iomanip 格式化输出
- 使用 getline 安全读取输入
- 使用 std::cerr 和 std::clog