C++笔记:关于输入和输出
文章目录
使用标准库进行控制台输入输出时,有一些需要知道的内容。
更新缓冲区
使用 C++ 进行控制台输出时,系统将先把内容输出到缓冲区,然后再显示到屏幕或输出到其它输出流的目的地上。为了保证获取输出结果,必须注意更新缓冲区。
导致缓冲区内容被刷新的几种情况
1、程序正常结束。作为main返回工作的一部分,将清空所有输出缓冲区。
2、缓冲区可能已经满了,在这种情况下,缓冲区将会在写下一个值之前刷新。
3、用操作符显式地刷新缓冲区,例如行结束符endl和flush。
4、在每次输出操作执行完后,用unitbuf操作符设置流的内部状态,从而清空缓冲区。
5、可将输出流与输入流关联起来。在这种情况下,在读输入流时,将刷新其关联的输出缓冲区。
此外还应注意,如果程序不正常结束,输出缓冲区将不会刷新。调试程序时,必须保证期待写入的每个输出都确实被刷新了。最好的方法是保证所有的输出操作都显式地调用了flush或endl。
下面的程序输出一些值并关注其缓冲区的状态。
#include <iostream>
int main()
{
// 使用 std::endl 显式地更新缓冲区。
std::cout << "Hello, world!" << std::endl;
std::cout << "Hi, My Child!";
// 使用 std::flush 显式地更新缓冲区。
std::flush(std::cout);
std::cout << "Run Finished.";
// 使用 return 0 自动更新缓冲区。
return 0;
}
由于以后程序可能会越来越长,为了简便起见,我开始使用 using namespace 语法。上述代码可以简单写为如下。
#include <iostream>
using namespace std;
int main()
{
// 使用 std::endl 显式地更新缓冲区。
cout << "Hello, world!" << endl;
cout << "Hi, My Child!";
// 使用 std::flush 显式地更新缓冲区。
flush(cout);
cout << "Run Finished.";
// 使用 return 0 自动更新缓冲区。
return 0;
}
这样代码就变得更为简洁。
读入未知数量的输入
先看下面的代码:
/* C++ 求和程序
* By Ceeji
*/
#include using namespace std;
int main()
{
int value, p = 0;
while (cin >> value)
{
p += value;
}
cout << p;
return 0;
}
这段代码能够实现任意多个整数的求和。我们看到其中采用了这样的语法。
while (cin » value)
我们知道,输入操作符返回的是 cin 本身。那么,对 cin 使用 while 循环判断意味着什么呢?答案就是,如果流是有效的(接受下一个输入是可能的),就为 true,否则为 false。
从键盘输入文件结束符
怎样才能使流无效?如果文件结束,当然就无效了。所以,关键是输入文件结束符。
- 在 Linux/Unix 中,输入 Ctrl + D。
- 在 Windows/Dos 中,输入 Ctrl + Z。
题外话:我帮你整理了包括 AI 写作、绘画、视频(自媒体制作)零门槛 AI 课程 + 国内可直接顺畅使用的软件。想让自己快速用上 AI 工具来降本增效,辅助工作和生活?限时报名。
© 转载需附带本文链接,依据 CC BY-NC-SA 4.0 发布。