2010-10-19 92 views
1

最近,我发现Xcode可以用来编写普通的C++程序。XCode,标准C++和ifstream文件处理

我的问题是用下面的代码:

#include <iostream> 
#include <fstream> 
using namespace std; 
int main (int argc, char *argv[]) { 
    char operation='0'; 
    int operand=0; 
    //open file for reading 
    ifstream ifile; 
    ifile.open (argv[1]); 
    if(!ifile.is_open()){ 
      cout<<"Invalid file\n"; 
      exit(1); 
    } 
    while(ifile.good()) 
    { 
      ifile>>operation; 

      if(operation=='I') { 
        ifile>>operand; 
        cout<<"Inserting :"<<operand<<endl; 
                } 
      else 
      if(operation=='D') { cout<<"Deleting "<<endl; 
                } 
    } 
    return 0; 
} 

当输入如下,

I 4 
I 8 
I 10 
I 9 
* 

当我编译和Xcode中运行,我得到以下

Loading program into debugger… 
Program loaded. 
run 
[Switching to process 58116] 
Inserting :0 
Running… 

Debugger stopped. 
Program exited with status value:0. 

我已经在项目首选项中设置了文件名作为参数。

然而,在终端,我得到

Inserting :4 
Inserting :8 
Inserting :10 
Inserting :9 

请帮助我理解为什么会这样。

+0

什么问题?它看起来很好。你在期待什么,你没有看到。 – Stabledog 2010-10-19 23:55:03

+0

@Stabledog:调试器输出显示“Inserting:0”,没有别的。 – dreamlax 2010-10-19 23:57:14

+0

只是一个与问题无关的观察:而不是'ifile.good()'你应该只使用'ifile'(隐式转换为'bool')或'!ifile.fail()'。 Iostreams'good'与'fail'不是相反的......重新提出这个问题,也许如果你在最后停止了程序,你会看到所有的输出结果? – 2010-10-20 00:02:15

回答

0

我没弄清楚它是什么,但重新安装XCode解决了这个问题。

0

您可能需要在项目首选参数中指定绝对路径。

+1

这只是要求麻烦......如果文件在项目目录中,其路径应该是项目相对的。 – Potatoswatter 2010-10-20 00:36:34

0

首先作为调试时的标准规则。 消除所有不必要的复杂性

我怀疑你的问题是你没有正确地指定argv[1]在你的调试参数,但我可能是错的。

首先,尝试手动指定文件名,而不是从argv [1]接受它。 (相对路径应该是从你的“工程/建筑/调试”目录)

您需要检查ifile.good()尝试读取字节,只有这样,你知道,如果EOF是在阅读时打中。

最后,经常检查ARGC阅读的argv []时。

+0

我在此处发布时删除了_argc_的检查。文件路径是_/ads/test.txt_,并由'cout << argv [1]'正确输出。另外,读取第一个'I',导致'Inserting:0'输出,所以我认为该文件是打开的。无论如何,我只是通过了文件名而不是'argv [1]'并获得相同的输出。 – Prithvi 2010-10-20 13:03:39

0

使用“编辑活动可执行文件”访问工作目录和命令行参数的设置。

XCode不幸的有一些冗余的项目设置,你需要打开右边的窗口。

+0

是的,我把它放在那里,硬编码文件名也不起作用。 – Prithvi 2010-10-20 13:08:48