2010-01-21 9 views
0

Я пытаюсь написать рекурсивную функцию, которая делает некоторое форматирование внутри файла, который я открываю для назначения класса. Это то, что я написал до сих пор:Чтение из файла в C++

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(); 
} 

Вопрос у меня есть в функции Reverse(). Это то, как я буду читать в одном персонаже за раз из файла? Благодарю.

ответ

0
void Reverse(ifstream &inFile) { 
    char myInput; 
    while (inFile.get(myInput)) { 
     // do something with myInput 
    } 
} 
1

Вы бы лучше использовать это:

char Reverse(ifstream &inFile) { 
    char myInput; 
    while (inFile >> myInput) { 
    ... 
    } 
} 

Это часто упускается из вида, что вы можете просто проверить, был ли входной поток ударил EOF (или какое-либо другое плохое состояние), просто тестирует объект потока. Он неявно преобразован в bool, а оператор istreamsbool() просто вызывает (я считаю) istream::good().

Объедините это с тем фактом, что оператор извлечения потока всегда возвращает сам объект потока (чтобы он мог быть прикован с несколькими выделениями, такими как «cin >> a >> b»), и вы достигаете очень сжатого синтаксис:

while (stream >> var1 >> var2 /* ... >> varN */) { } 

UPDATE

к сожалению, я не думаю - это, конечно, будет пропускать пробелы, которые не будут работать на вашем примере реверсирования содержимое файла. Лучше от наклеивания с

char ch; 
while (inFile.get(ch)) { 

} 

который также возвращает объект IStream, что позволяет неявный вызов good().