如何从输入流读取到文件流



我正在尝试将输入流与文件流绑定,我希望从输入流中输入一些东西,然后自动刷新到文件流
它不起作用。。。我从键盘输入了一些东西,输出文件仍然是空的

#include <iostream>
#include <fstream>
#include <stdexcept>
using namespace std;
int main(int argc, char const *argv[])
{
    ofstream outfile("outfile" , ofstream::app | ofstream::out);
    if(!outfile)
        throw runtime_error("Open the file error");
    ostream * old_tie = cin.tie();//get old tie 
    cin.tie(0);//unbind from old tie
    cin.tie(&outfile);//bind new ostream
    string temp;
    while(cin >> temp)
    {
        if(temp == ".")//stop input
            break;
    }
    cin.tie(0);
    cin.tie(old_tie);// recovery old tie
    return 0;

}

您的程序过于复杂,并且滥用了tie()。尝试以下操作:

#include <iostream>
#include <fstream>
int main() {
    using namespace std;
    ofstream outfile("outfile" , ofstream::app | ofstream::out);
    if(!outfile) {
        cerr << "Open the file error";
        return 1;
    }
    char data(0);
    while(data != '.') {
        cin.get(data);
        cin.clear(); // Prevents EOF errors;
        outfile << data;
    }
    return 0;
}

它一个字符接一个字符地读取,直到找到。

错误:

  • 如果你没有抓住它,为什么要抛出异常…

  • 请关闭文件

  • 你是否将文件中的数据放入临时文件中,并通过它找到"."和结束程序?

  • 为什么用指针表示old_tie?用它表示流文件的第一个像这个stream*文件。

  • 修复if语句并破坏

  • 包含字符串库///这可能会解决问题

  • 什么是文件名??

  • tie(0)函数是用来解除绑定的吗?

//编辑

说明:

使用findfirstof函数找到第一个句点后,创建一个子字符串并将其复制到outfile中。该解决方案非常有效,每次都有效。逻辑是最简单的。不要使用不必要的函数和初始化不必要的变量,因为当变量太多时,它会更复杂,更容易出错。

解决方案:-不需要cin.tie()

#include <iostream>
#include <fstream>
#include <string>

using namespace std;
int main(int argc, char const *argv[])
{
    ofstream outfile("outfile" , ofstream::app | ofstream::out);
    string s;
    getline(cin, s);
    int i = s.find_first_of(".");
    if(i!=std::string::npos)
    {
        s = s.substr(0, i);
        outfile << s;
    }
    else
    {
        cout << "No periods found" << endl;
    }
}

编译代码-http://ideone.com/ooj1ej

如果需要解释,请在下面的评论中提问。

相关内容

  • 没有找到相关文章