3

何を試しても、次のコードを正しく動作させることができません。

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を出力し、2番目で0を出力します。これは、ファイルが正しく開いていることを示していますが、inFileは、そこから読み込まれるとすぐに失敗します。ファイルには十分な数の行/文字が含まれているため、その時点までにファイルの終わりを超えて読み込もうとした方法はありません。

ファイルの内容:

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

4 に答える 4

3

これは既知のバグです。Xcode 3.2.1のリリースノートから:

デフォルトのgcc4.2コンパイラは、標準C++ライブラリのデバッグモードと互換性がありません。Xcode3.2でコンパイルされたC++プログラムは、デバッグ構成では機能しない場合があります。これを修正するには、コンパイラのバージョンを4.0に設定するか、デバッグ構成のプリプロセッサマクロを編集してエントリを削除します。
_GLIBCXX_DEBUG=1 _GLIBCXX_DEBUG_PEDANTIC=1

于 2010-04-02T21:58:22.527 に答える
2

X-Codeの問題であることが判明しました。同じ正確なコードを使用してNetBeansでプロジェクトを作成しましたが、問題はありませんでした。変。

更新:X-Codeプロジェクトで、アクティブなSDKをMacOS10.6からMacOS10.5に変更しましたが、すべて正常に動作するようになりました。

于 2010-01-22T16:38:54.757 に答える
1

コードとファイルを複製してテストしました。出力は11で、levelLWとnumLevelsの両方が期待どおりに設定されました。私は間違いなくあなたのファイルに隠された文字(またはその欠如)を厳しく見ます。「すべての文字を表示」を有効にしてNotepad++を使用するのが好きです。私のファイルは、各行の終わりにキャリッジリターンとラインフィードを付けて投稿したものとまったく同じです。

于 2010-01-21T05:48:58.393 に答える
1

最初のinFile.good()が1を出力するとおっしゃいました。これは、ファイルが正常に開かれたことを意味します。tehMickの投稿で「ターミナルでは機能しますがXCodeでは機能しません」と言ったので、これをテストしたときに、次の問題が発生しました。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ですべてを行いました)。

于 2010-01-21T09:51:07.110 に答える