Вопрос

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

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

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

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

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
Это было полезно?

Решение 2

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

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

Другие советы

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

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

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

Вы сказали, что первый inFile.good() выводит 1.Это должно означать, что файл открылся нормально.Поскольку вы сказали "это работает через терминал, но не XCode" в tehMick post - как бы то ни было, - когда я тестировал это, я столкнулся со следующей проблемой:моя среда разработки (C ++ Builder) запускает программу из каталога отладки (когда вы находитесь в режиме отладки).Мне нужно было поместить "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).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top