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
Foi útil?

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).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top