Пишу вот программку, которая должна два раза файл в цикле читать, и столкнулся с проблемой - после достижения eof в первом цикле и seekg(0) на начало файла, во втором получаю eof на первой итерации.
void search() { char topic[TOPIC]; ifstream infile; BOOK b; infile.open("books.txt", ios::in); if(!infile) { cerr << "Ошибка открытия файла books.txt\n"; exit(1); }
cout << "Название дисциплины для поиска:"; cin.seekg(0, ios::end); cin.get(topic, TOPIC-1, '\n'); cout << "Найденные авторы:\n"; while(!infile.eof()) { infile >> b; // читаю одну запись из файла if(strcmp(b.topic, topic) == 0) cout << b.authors << endl; //если дисциплина совпала, печатаю авторов } // Глюки начинаются тут. infile.seekg(0); if (infile.eof()) cout << "Вот тут злобный eof откуда-то ;-( \n"; infile.close(); cout << endl; }
получаю полсле seekg сразу eof. вместо infile.seekg(0) кучу всего перепробовал типа infile.seekg(0,ios::beg); infile.seekg(0,ios_base::beg);
и еще с десяток разных вариантов. И даже infile.close(); infile.open("books.txt", ios::in);
при этом infile.tellg() дает правильный 0 ! И flush в ifstream вроде как нету, только в ofstream.
Можно, конечно, 2 разных потоково-файловых использовать, infile1 и infile2, но это слишком неправильно.
Такие дела.