【问题标题】:cant get ifstream to work in XCode无法让 ifstream 在 XCode 中工作
【发布时间】:2010-01-21 05:24:33
【问题描述】:

无论我尝试什么,我都无法让以下代码正常工作。

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

文件内容:

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

【问题讨论】:

  • 文件的内容是什么,这个块末尾的levelLW和numLevels的值是多少?我的猜测是 inFile >> levelLW >> numLevels;正在贪婪地消耗比您预期的更多的字节。
  • 在 inFile 之后它们的值仍然为 0 >>
  • 我的猜测是输入文件有一些不可见的字符。在 unix 上,我将运行 hexdump -b &lt;file&gt; 来查看文件的内容。

标签: c++ xcode ifstream


【解决方案1】:

这是一个已知的错误。来自 Xcode 3.2.1 的Release Notes

默认的 gcc 4.2 编译器不是 与标准 C++ 兼容 库调试模式。 C++ 程序 使用 Xcode 3.2 编译可能无法正常工作 在调试配置中。修理 这个,将编译器版本设置为 4.0, 或编辑调试配置的 预处理器宏并删除 参赛作品:
_GLIBCXX_DEBUG=1 _GLIBCXX_DEBUG_PEDANTIC=1

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 这是一个已知的错误。请参阅我的答案以获取链接。
    【解决方案3】:

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

    【讨论】:

    • 我只是在最后使用回车符和换行符重新输入了整个文件,但仍然没有运气
    • 你先#include ,然后#include ?注意更简单的打开文件的方法是:ifstream inFile("sampleplanet");。更简单的测试文件的方法是: if (inFile) { inFile >> levelLW >> numLevels; }.
    【解决方案4】:

    您说第一个 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 下完成了所有操作)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-02
      • 2016-11-11
      • 1970-01-01
      • 1970-01-01
      • 2014-11-04
      • 2021-04-08
      • 1970-01-01
      相关资源
      最近更新 更多