C++ 从C++;
我正在尝试编写一个递归函数,在为类赋值打开的文件中进行一些格式化。这是我到目前为止写的:C++ 从C++;,c++,file-io,stream,C++,File Io,Stream,我正在尝试编写一个递归函数,在为类赋值打开的文件中进行一些格式化。这是我到目前为止写的: const char * const FILENAME = "test.rtf"; void OpenFile(const char *fileName, ifstream &inFile) { inFile.open(FILENAME, ios_base::in); if (!inFile.is_open()) { cerr << "Could not
const char * const FILENAME = "test.rtf";
void OpenFile(const char *fileName, ifstream &inFile) {
inFile.open(FILENAME, ios_base::in);
if (!inFile.is_open()) {
cerr << "Could not open file " << fileName << "\n";
exit(EXIT_FAILURE);
}
else {
cout << "File Open successful";
}
}
int Reverse(ifstream &inFile) {
int myInput;
while (inFile != EOF) {
myInput = cin.get();
}
}
int main(int argc, char *argv[]) {
ifstream inFile; // create ifstream file object
OpenFile(FILENAME, inFile); // open file, FILENAME, with ifstream inFile object
Reverse(inFile); // reverse lines according to output using infile object
inFile.close();
}
const char*const FILENAME=“test.rtf”;
void OpenFile(常量字符*文件名、ifstream和infle){
open(文件名,ios_base::in);
如果(!infle.is_open()){
cerr您最好使用以下方法:
char Reverse(ifstream &inFile) {
char myInput;
while (inFile >> myInput) {
...
}
}
经常被忽略的是,只需测试stream对象,就可以简单地测试输入流是否达到EOF(或其他错误状态)。它被隐式转换为bool
,而istreams
操作符bool()
只需调用(我相信)istream::good()
再加上stream extraction操作符总是返回stream对象本身(这样它就可以与多个提取链接起来,例如“cin>>a>>b”),您就可以得到非常简洁的语法:
while (stream >> var1 >> var2 /* ... >> varN */) { }
更新
对不起,我没有考虑-当然这会跳过空白,这对你的反转文件内容的例子不起作用。最好还是坚持使用
char ch;
while (inFile.get(ch)) {
}
它还返回istream对象,允许隐式调用good()
void Reverse(ifstream &inFile) {
char myInput;
while ( inFile.get( myInput ) ) {
// do something with myInput
}
}