c ++ чтение текста в строку ошибка - PullRequest
0 голосов
/ 05 декабря 2011

Этот проект на c ++. Я пытаюсь перемещаться по текстовому файлу и каждый раз печатать на экране подстроку длиной 80 символов. Следующим шагом будет обновить начальную позицию x, а затем снова напечатать. Моя цель - «скользить» по тексту. Когда я запускаю операцию второго потока, я не получаю сообщение об ошибке, но на экране больше нет текста. Кто-нибудь знает, что я делаю не так? Должен ли я закрыть файл перед выполнением новой операции? Thanx

ifstream ifs("data.txt");
string line;
string subline;
int x=5;

while(getline(ifs,line)) {
    subline=line.substr(x,80);
    cout << subline;
}

system("pause");
system("cls");
x++;


//my issue!
while(getline(ifs,line)) {
    subline=line.substr(x,80);
    cout << subline;
}

Ответы [ 3 ]

3 голосов
/ 05 декабря 2011

Да, вам нужно закрыть файл после его использования.Всегда очищайте все, что вы делаете в программировании, особенно файловые операции.

Перед тем, как приступить к работе с файлом, вам следует убедиться, что файл действительно успешно открылся.Когда вы открываете файл, как у вас (используя конструктор), вы ничего не возвращаете, если операция открытия файла не удалась.

Вы можете проверить метод ifstream 'good ()', чтобы увидеть, является ли потокуспешно открыт, или 'fail ()', чтобы увидеть, если это не так.

например,

ifstream ifs("data.txt");
if( ifs.fail() )
{
  std::cerr << "There was an error opening the file" << std::endl;
  return -1; // use -1, or some sort of non-zero number representing your error code to the command line
}

// Do your reading / writing

ifs.close();

Я рекомендую прочитать эту информацию о некоторых доступных функцияхвам при использовании ifstream.

2 голосов
/ 05 декабря 2011

Вы достигли конца файла, и он установит бит состояния ' eof ' (и удалит бит состояния ' good '). Это будет означать, что в основном все последующие операции чтения будут неудачными.

Простое исправление - добавить после x ++:

ifs.clear(); // Get rid of the 'eof' state bit
ifs.seekg(0, ios_base::beg); // Go back to the beginning of the file
1 голос
/ 05 декабря 2011

Вы должны попытаться закрыть файл перед тем, как открыть его во второй раз. Проблема заключается в том, что указатель файла указывает на последнее, когда выполняется второе чтение. Попробуйте сбросить указатель файла на начало или заново открыть файл.

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