- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
此代码的目的是支持通过 ./a.out < input_file_name
运行我的代码或者只是 ./a.out input_file_name
.我知道我可以将我的阅读部分包装到一个带有参数 iostream&
的单独函数中, 所以我可以通过 ifstream
或 cin
取决于是否argc == 2
.
int main(int argc, char* argv[]) {
if (argc != 1 && argc != 2) {
cerr << "usage file or <file" << endl;
}
ifstream in;
if (argc == 2) {
in.open(argv[1]);
cin.rdbuf(in.rdbuf());
}
string line;
while (getline(cin, line))
cout << line << "\n";
}
我上面的琐碎代码总是使用 cin
读东西。我需要设置 cin
吗?回到原来的状态 rdbuf
?
我发现一些代码示例总是后退 rdbuf
到它的原始值。我们必须这样做吗?更改 cin 或 cout 的 rdbuf 之后没有设置回原来的 rdbuf 是否会导致资源泄漏?
最佳答案
您正确地建议将读取包装到一个单独的函数中,该函数将 in
或 cin
作为参数传递。那将是最好的解决方案。
除此之外,回答您的问题:您不需要将其退回;但您可能会以这种方式伤害其他用户。使用cin
从某个文件中读取是非常意外的。以下在您的程序中使用 cin
的用户将很难正常使用 cin
。如果您想保留您的代码,您可能应该将其设置回去。
为什么不只执行以下操作(将 cin
完全放在一边):
ifstream in;
if (argc > 2) {
in.open(argv[1]);
}
istream & input = (argc > 2 ? in : cin);
string line;
while (getline(input, line))
cout << line << "\n";
关于c++ - 我必须设置 rdbuf 吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32849578/
#include #include #include using namespace std; int main() { ofstream fout("test.txt"); f
我想报告一个错误的解决方案在 Mac OS X El Capitan 版本 10.11.2 中安装 OpenFOAM 3.0.1 时得到错误是: "error: member reference ty
有没有人有一个例子来说明如何重新定义 C++ 内置的 clog,而不是有一个新的关联 rdbuf(),它被处理为原始 clog.rdbuf() 和 ofstream 对象的 rdbuf() 的三通到磁
使用这段代码,我从文件中读取了一个字符串。 pbuf = infile.rdbuf(); size = pbuf->pubseekoff(0, ios::end, ios::in); pbuf->pu
我试图通过简单地使用 rdbuf() 将两个文件合并为一个文件,但是在合并时,文件的第一行丢失了。代码如下: void mergeFiles(ifstream &file1, ifstream &fi
我有一个单元测试,它通过读取函数发送的缓冲区来验证函数: template void print_manifold(Manifold const& manifold) try { std::co
我正在尝试将文件内容复制到缓冲区。 std::ifstream fp(myFile, std::ios::binary) fp.seekg(0, fp.end); // set cursor at t
在下面的例子中, ifstream myFile; myFile.open("example.txt", ios::binary); cout << myFile.rdbuf() << endl; m
我正在尝试了解 IO 流的结构。 从 cppreference std::basic_stringstream::str 开始: Manages the contents of the underly
使用 rdbuf 将流复制到另一个流是一种众所周知的方法: #include #include int main() { std::ifstream in{"/tmp/foo.txt"};
这是我的简单代码: #include int main() { int foo; std::cin.rdbuf(std::cout.rdbuf()); std::cin>>f
提出以下问题的用户很快就接受了“读取缓冲区”: What does rd stand for in rdstate and rdbuf? 我仍然想知道“读取缓冲区”在“std::ostream”(co
我试试下面的代码: ostringstream oss; streambuf *psbuf, *backup; backup = oss.rdbuf(); psbuf = cout.rdbuf
比方说,我有几个数字的文件 input.txt 1 2 4 51 3 77 现在,我正在尝试执行这个命令: `string filename="input.txt"; ifstream ifs
有一个STL 库函数 streambuf* std::basic_ios::rdbuf (streambuf* sb); 此函数可用于更改与流关联的流缓冲区。如果您使用它,它会返回一个指向先前使用的
此代码的目的是支持通过 ./a.out 2) { in.open(argv[1]); } istream & input = (argc > 2 ? in : cin); string li
我有以下代码,它工作得很好(除了它很慢,但我不太在意)。将 infile 的全部内容写入 outfile 似乎并不直观。 // Returns 1 if failed and 0 if success
ofstream ofs1("file1.dat", ios::out | ios::binary); unsigned char data[64] = {0}; ofs1.write((char*)
是否可以在使用 .rdbuf() 函数将缓冲区推送到另一个流 stream 后重用字符串流 s? 我重建了环境: http://ideone.com/JoPJ1E #include using na
我正在尝试使用 pubsetbuf 方法修改 stringstream 对象的 stringbuffer 而不必复制字符串,但它不起作用。我正在关注 http://www.cplusplus.com/
我是一名优秀的程序员,十分优秀!