не могу получить ifstream для работы в XCode - PullRequest
3 голосов
/ 21 января 2010

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

ifstream inFile;
inFile.open("sampleplanet");
cout << (inFile.good()); //prints a 1
int levelLW = 0;
int numLevels = 0;
inFile >> levelLW >> numLevels;
cout << (inFile.good()); //prints a 0

на первой cout << (inFile.good ()); она печатает 1, а на втором 0. Это говорит о том, что файл открывается правильно, но inFile перестает работать, как только читается из него , Файл содержит более чем достаточно строк / символов, поэтому я не пытался прочитать этот файл после конца файла. </p>

Содержимое файла:

8
2
#level 2
XXXXXXXX
X......X
X..X..XX
X.X....X
X..XX..X
XXXX...X
X...T..X
XXX..XXX
#level 1
XXXXXXXX
X......X
X..X.XXX
X.X..X.X
X..XX..X
X......X
X^....SX
XXX.^XXX

Ответы [ 4 ]

3 голосов
/ 03 апреля 2010

Это известная ошибка. Из Xcode 3.2.1 Примечания к выпуску :

Компилятором gcc 4.2 по умолчанию не является совместим со стандартом C ++ Режим отладки библиотеки. Программы на C ++ скомпилированный с Xcode 3.2 может не работать в конфигурации отладки. Чинить это, установите версию компилятора на 4.0, или измените конфигурацию отладки Препроцессор Макросы и удалить Записи:
_GLIBCXX_DEBUG=1 _GLIBCXX_DEBUG_PEDANTIC=1

2 голосов
/ 22 января 2010

Оказалось, проблема с X-Code. Я создал проект в сетевых компонентах, используя тот же самый точный код, и у меня не было проблем. Weird.

Обновление: В своем проекте X-Code я изменил свой активный SDK с Mac OS 10.6 на Mac OS 10.5, и теперь все работает нормально.

1 голос
/ 21 января 2010

Вы сказали, что первая inFile.good () распечатывает 1. Это должно означать, что файл открыт ОК. Поскольку вы сказали «это работает через терминал, но не через XCode» в посте tehMick - для чего это стоит - когда я это проверял, я столкнулся со следующей проблемой: моя IDE (C ++ Builder) запускает программу из каталога DEBUG (когда вы находитесь в режиме отладки). Мне нужно было поместить "sampleplanet" в каталог DEBUG или использовать путь в открытом виде, который нашел файл типа ".. \\ sampleplanet".

+MyProjectDirectory
|  mymain.cpp (Even though this is where I had the source file..)
|  sampleplanet
+--DebugDirectory
     mymain.obj
     mymain.exe (the program runs out of this directory.)

Как только я позаботился о вышеуказанной проблеме, все сработало, как и ожидалось, используя приведенный выше код и файл. Я проверил файл в Notepadd ++, чтобы подтвердить [CR] [LF] после каждой строки. Если вы создаете файл в Linux, он может иметь только [LF] (я все делал под Windows).

1 голос
/ 21 января 2010

Я воспроизвел и протестировал ваш код и файл, и у меня было 11 выводов, и уровни, и уровень, и уровень были установлены, как ожидалось Я бы определенно внимательно посмотрел на скрытые символы в вашем файле (или их отсутствие). Мне нравится использовать Notepad ++ с включенным «Показать все символы». Мой файл - это именно то, что вы разместили с возвратом каретки и переводом строки в конце каждой строки.

...