ifstream object.eof () не работает - PullRequest
1 голос
/ 08 апреля 2009

Я думаю, что мне может понадобиться использовать логическое bValue = false для моего условия while:

char cArray[ 100 ] = "";
ifstream object;
cout << "Enter full path name: ";
cin.getline( cArray, 100 );
if ( !object ) return -1   // Path is not valid? This statement executes why?

ifstream object.open( cArray, 100 );

// read the contents of a text file until we hit eof.
while ( !object.eof() )
{
// parse the file here

}

Почему я не могу ввести полный путь к текстовому файлу?

Это может быть из-за eof. Является ли их синтаксис для логического выражения, которое может эмулировать eof?

Могу ли я иметь:

while ( !object == true )
{
// parase contents of file
}

Ответы [ 2 ]

7 голосов
/ 08 апреля 2009

Пожалуйста, обратите внимание, что для правильного чтения текстового файла НЕ требуется использование функций eof (), good (), bad () или indifferent () (ОК, я сделал последний вверх). То же самое верно в C (с fgets (), feof () и др.). По сути, эти флаги будут установлены только ПОСЛЕ того, как вы пытались что-то прочитать, с помощью функции, подобной getline (). Намного проще и с большей вероятностью правильно проверить, что функции чтения, такие как getline (), действительно что-то читают напрямую.

Не проверено - я обновляю свой компилятор:

#include <iostream>
#include <fstream>
#include <string>
using namespacr std;

imt main() {

   string filename;
   getline( cin, filename );

   ifstream ifs( filename.c_str() );
   if ( ! ifs.is_open() ) {
       // error
   }

   string line;
   while( getline( ifs, line ) ) {
       // do something with line
   }
}
0 голосов
/ 08 апреля 2009

Функция ifstream::open принимает имя файла и дополнительный режим. Поскольку вы хотите прочитать весь файл, почему бы не начать с самого начала:

ifstream obj(cArray);
if (obj) { // file successfully opened for reading
    while (obj.good()) {
        // read in a line at a time
        string line;
        getline(line, obj);
        if (!line.empty()) { // we have something to work with
           // parse
        }
    }
}

Конечно, более гладкая версия - это тест на getline в цикле while в роли Нила Баттерворта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...