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,在第二个打印一个 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 的发行说明

默认的 gcc 4.2 编译器与标准 C++ 库调试模式不兼容。使用 Xcode 3.2 编译的 C++ 程序可能无法在调试配置中运行。要解决此问题,请将编译器版本设置为 4.0,或编辑调试配置的预处理器宏并删除条目:
_GLIBCXX_DEBUG=1 _GLIBCXX_DEBUG_PEDANTIC=1

于 2010-04-02T21:58:22.527 回答
2

原来是 X-Code 的问题。我使用完全相同的代码在 net beans 中创建了一个项目,没有任何问题。诡异的。

更新:在我的 X-Code 项目中,我将活动 SDK 从 Mac OS 10.6 更改为 Mac OS 10.5,现在一切正常。

于 2010-01-22T16:38:54.757 回答
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 回答
1

我复制并测试了您的代码和文件,我的输出是 11,并且 levelLW 和 numLevels 都按预期设置。我肯定会仔细查看文件中的隐藏字符(或缺少隐藏字符)。我喜欢使用启用了“显示所有字符”的 Notepad++。我的文件正是您在每行末尾带有回车和换行符的内容。

于 2010-01-21T05:48:58.393 回答