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
    }
}