前言
文件流对象和>>及<<的匹配老搞混,恼火。现在做个了断。以下面这个例子具体分析。
情况描述
ifstream继承了istream,因此可以将ifstream对象作为参数传递给形参为istream的函数。编写一个示例程序验证。
我的错误代码:
错误在这里
正确代码
总结
使用文件IO流,一定要非常明确用输入还是输出流(流对象代表文件,别搞混),然后确定好对应的操作符(<<还是>>)。
文件流对象和>>及<<的匹配老搞混,恼火。现在做个了断。以下面这个例子具体分析。
情况描述
ifstream继承了istream,因此可以将ifstream对象作为参数传递给形参为istream的函数。编写一个示例程序验证。
我的错误代码:
/* 程序往文件1中写入字符串"GoodBye" */
#include <iostream>
#include <fstream>
using namespace std;
void fun(istream & is) {
is << "GoodBye" << endl;
}
int main()
{
ifstream ifs;
ifs.open("1");
if (!ifs) {
cout << "ERROR" << endl;
return 1;
}
else {
fun(ifs);
}
return 0;
}
错误在这里
is << "GoodBye" << endl;
因为ifstream用于读取文件,而我的设想是要往文件中写入数据,应该使用ostream,再搭配操作符<<。
正确代码
/* 程序往文件1中写入字符串"GoodBye" */
#include <iostream>
#include <fstream>
using namespace std;
void fun(ostream & os) {
os << "GoodBye" << endl;
}
int main()
{
ofstream ofs;
ofs.open("1");
if (!ofs) {
cout << "ERROR" << endl;
return 1;
}
else {
fun(ofs);
}
return 0;
}
总结
使用文件IO流,一定要非常明确用输入还是输出流(流对象代表文件,别搞混),然后确定好对应的操作符(<<还是>>)。