我正在尝试将输入流与文件流绑定,我希望从输入流中输入一些东西,然后自动刷新到文件流
它不起作用。。。我从键盘输入了一些东西,输出文件仍然是空的
#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
如果需要解释,请在下面的评论中提问。