Уже в течение 5 дней пытаюсь разобраться с необычным поведением куска программы, который должен читать файлы. Вот он:
//Вот инклуды, вообще они в файле map.h
#include <ncurses.h>
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <fstream>
#include "mapfield.h"
int Map::loadMap ( )
{
std::ifstream fin ( "test_map.map" );
fin.unsetf ( std::ios_base::skipws );
if ( !fin.is_open ( ) )
exit ( -1 );
std::ofstream fout ( "test_map_log.map" ); //лог файл для отладки, выводит то, что читается в buf
int i = 0;
fin >> mCameraX >> mCameraY;
fout << mCameraX << mCameraY;
char buf = 'a';
for ( i = 0; i < mWholeMapSizeX * mWholeMapSizeY; i++ )
//while ( !fin.eof ( ) )
{
fin >> buf;
fout << buf;
MapField *mapfield = new MapField ( buf );
mapFields.push_back ( *mapfield );
delete mapfield;
}
return 0;
}
Файл с картой лежит в той же директории, что и исполняемый файл. Ошибок открытия нет (проверка открытия проходит успешно). Gdb показывает, что данные из файла как бы читаются (все операторы выполняются, без ошибок), но при этом в buf ничего не записывается. Если в качестве условия поставить закомментированное while ( !fin.eof ( ) ), цикл уходит в бесконечный. А теперь самое забавное. Я решил попробовать написать отдельную программку, чтобы попробовать на ней различные варианты решения проблемы. Она работает. Код практически идентичен.
#include <fstream>
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <string>
int main ( void )
{
std::ifstream fin ( "test.txt" );
fin.unsetf( std::ios_base::skipws );
if ( !fin.is_open ( ) )
exit ( -1 );
std::ofstream fout ( "test_log.txt" );
char buf = 'a';
while ( !fin.eof ( ) )
{
fin >> buf;
std::cout << buf;
fout << buf;
}
std::cout << std::endl << "That's all" << std::endl;
system ( "sleep 2" );
return 0;
}