Não consigo fazer o ifstream funcionar no xcode
Pergunta
Não importa o que eu tente, não consigo obter o seguinte código para funcionar corretamente.
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
No primeiro cout << (infile.good ());, ele imprime um 1 e no segundo A 0. O que me diz que o arquivo está abrindo corretamente, mas o infili está falhando assim que lida. O arquivo tem mais do que linhas/caracteres suficientes, então não há como eu tentar ler além do final do arquivo nesse ponto.
Conteúdo do arquivo:
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
Solução 2
Acabou sendo um problema com o X-Code. Criei um projeto em feijões líquidos usando o mesmo código exato e não tive problemas. Esquisito.
ATUALIZAÇÃO: No meu projeto X-Code, mudei meu SDK ativo do Mac OS 10.6 para Mac OS 10.5 e tudo funciona bem agora.
Outras dicas
É um bug conhecido. Do xcode 3.2.1's Notas de liberação:
O compilador padrão GCC 4.2 não é compatível com o modo de depuração da biblioteca C ++ padrão. Os programas C ++ compilados com o Xcode 3.2 podem não funcionar na configuração de depuração. Para corrigir isso, defina a versão do compilador como 4.0 ou edite as macros pré -processador da configuração de depuração e remova as entradas:
_GLIBCXX_DEBUG=1 _GLIBCXX_DEBUG_PEDANTIC=1
Reproduzi e testei seu código e arquivo e minha saída foi 11 e o Levellw e os Numlevels foram definidos como esperado. Eu definitivamente daria uma olhada nos personagens ocultos em seu arquivo (ou na falta dele). Eu gosto de usar o bloco de notas ++ com "Mostrar todos os personagens" ativado. Meu arquivo é exatamente o que você postou com um retorno de carruagem e uma linha de linha no final de cada linha.
Você disse que o primeiro infilum.Good () imprime 1. Isso deve significar que o arquivo foi aberto OK. Porque você disse que "funciona no terminal, mas não no xcode" em Tehmick Post - pelo que vale a pena - quando testei isso, encontrei o seguinte problema: Meu IDE (C ++ Builder) executa o programa em um diretório de depuração (quando você está no modo de depuração). Eu precisava colocar "SamplePlanet" no diretório de depuração ou usar um caminho no aberto que encontrou o arquivo como ".. 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.)
Depois de cuidar da edição acima, tudo funcionou conforme o esperado, usando o código e o arquivo acima. Eu verifiquei o arquivo no bloco de notas ++ para confirmar o [CR] [LF] após cada linha. Se você criar o arquivo no Linux, ele pode ter apenas [LF] (no entanto (eu fiz tudo no Windows).