gpt4 book ai didi

c++ - 使用函数在 cin 和 ifstream 之间切换

转载 作者:太空宇宙 更新时间:2023-11-04 13:37:19 27 4
gpt4 key购买 nike

我正在尝试使用函数操作数组,同时在标准 cin、cout 和 ifstream、ostream 之间切换。

具体来说,我有一系列书籍,我有一些基本功能,如搜索标题、出版商、价格等。我还有两个名为“登录”和“注销”的功能,用于打开文件和重定向 登录时 bookList 的 istream 和 ostream 到那个输出文件,以及关闭它并在注销时返回到 istream,ostream。

void bookList(istream& in, ostream& out)
{
//ask for command from istream in
//command selection loop
}

int load(ofstream& out, book booklist[], int size)
{
//load list of books from input file
}

void logon(ofstream& out, string filename)
{
out.open(filename.c_str());
}

void logoff(ofstream& out, string filename)
{
out.close();
}
// some other functions

每当函数被调用时,我还需要向用户打印通知(注销时在屏幕上或登录时在文件上)。

我试图将 ifstream& 作为每个函数的参数,但它们只打印到文本文件而不是屏幕上(因为它只是 ifstream,而不是 istream),但以其他方式执行它是行不通的。

我的问题是,是否有方法可以使函数登录将 bookList 的 istream 重定向到 ifstream 到输出文件,反之亦然以进行注销?而不是“文件打开”条件。

最佳答案

这可能不是您要找的直接内容,但可以修改。

/// this buffer will be used to switch output
void IO_Switch(streambuf* buffer);

int main(){
streambuf *buffer
ofstream fout;
fout.open("filename.txt");

// below you call cout.rdbuf() which directs stream to cout
IO_Switch(cout.rdbuf());
cout << "This is coming to the console";
// below you call fout.rdbuf());
IO_Switch(fout.rdbuf());
cout << "I used cout here, but the stream is redirected to fout ("filename.txt")

return 0;
}

void IO_Switch(streambuf* buffer){
cout.rdbuf(buffer);
}

关于c++ - 使用函数在 cin 和 ifstream 之间切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29130639/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com