2010-10-19 91 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