2013-10-11 40 views
0

新人在這裏。我正在嘗試使用Mac OS X學習C++,並且遇到嚴重問題讓調試器在Eclipse或Netbeans中工作(出於某種瘋狂的原因無法獲得gdb),所以決定嘗試使用Xcode。我有一個簡單的排序程序,但不知道如何獲得輸出文件。這是我迄今爲止所做的:如何在Xcode中使用參數

  1. 創建一個名稱列表並將其保存在Sort文件夾中作爲Names.txt。
  2. 進入Xcode的「編輯方案」選項卡並添加了兩個參數Names.txt和Output.txt。
  3. 運行程序時沒有錯誤或問題,但Output.txt不會被創建。
  4. 在Xcode中,我使用「添加文件進行排序」將Names.txt拉入,並創建了一個空白的Output.txt文件並將其保存在Sort文件夾中。然後,我也將Output.txt拖入Xcode中。
  5. 運行程序並仍然有一個空白的Output.txt文件。

這是因爲寫的代碼:我相信代碼是正確的,因爲它工作在Eclipse

#include <iostream> 
#include <fstream> 
#include <string> 
using namespace std; 

// Constants 
#define BUFFER_SIZE 50 
#define ARRAY_SIZE 20 

// Global variables 
int numElements = 0; 

//function prototypes 
void sort(string elements[]); // sort an array of strings in ascending order 

void swap(string& s1, string& s2); // swap s1 and s2 

int main(int argc, char *argv[]) 
{ 
    char buffer[BUFFER_SIZE]; 
    string listOfNames[ARRAY_SIZE]; 

    string inputFileName; 
    string outputFileName; 
    ifstream inputFile; 
    ofstream outputFile; 

    if(argc != 3) { 
     cout << "Error: Please enter input and output files "; 
     cout << "as command line arguments !" << endl; 
    } 
    else { 
     inputFileName = argv[1]; 
     outputFileName = argv[2]; 
     inputFile.open(inputFileName.c_str()); 
     outputFile.open(outputFileName.c_str()); 

     // Read names from input file and store into array 
     while(!inputFile.eof() && numElements < (ARRAY_SIZE - 1)) { 
      inputFile.getline(buffer, BUFFER_SIZE); 
      string p = string(buffer); 
      listOfNames[numElements] = p; 
      numElements++; 
     } 
     // Sort elements in array 
     sort(listOfNames); 
     // Print elements in array to output file 
     for(int i = 0; i < numElements; i++) { 
      outputFile << listOfNames[i] << endl; 
     } 
     inputFile.close(); 
     outputFile.close(); 
    } 

    cout << "Sorting done!!!" << endl; 

    return 0; 
}// end main 


// perform bubble sort 
// sort names in ascending order 
void sort(string elements[]) { 
    bool change = true; 

    while(change) { 
     change = false; 
     for (int i = 0; i < (numElements - 1); i++) { 
      if (elements[i] > elements[i + 1]) { 
       swap(elements[i], elements[i+1]); 
      change = true; 
      } 
     } 
    } 
} 

// swapping 2 string 
void swap(string& s1, string& s2) { 
    string temp = s1; 
    s1 = s2; 
    s2 = temp; 
} 

...我只是不知道如何讓Xcode中產生輸出文件。

+0

你怎麼知道'Output.txt'沒有被創建?你在哪裏指定文件路徑? – nhgrif

+0

我在Sort的編輯方案中添加Output.txt作爲參數。它應該建立在與Sort.cpp相同的文件夾中嗎?請讓我知道如果我錯了,但我在我的電腦上找不到任何Output.txt,除了我自己製作的副本,它仍然是空白的。 – user2722670

+0

如果您使用的是最新的mac os,那麼您應該使用'lldb',而不是使用'gdb'。您可以使用一系列'getcwd'來確定應用程序的運行位置以及您應該在哪裏找到該文件。 – Petesh

回答

2

問題幾乎可以肯定的是,你沒有在程序的工作目錄中尋找。這就是'Output.txt'被創建的地方,而IIRC默認是在Xcode爲〜/ Library文件夾中的Xcode應用程序支持區域中的項目創建的目錄中。

我相信你可以在方案中設置工作目錄。您也可以使用Organizer打開Xcode爲該項目創建的文件夾。

請注意,這會影響您的Output.txt和您的Names.txt; std::ifstream不會因爲您已將其添加到Xcode項目而打開文件。您可能需要使用絕對路徑或將該文件放在工作目錄中。

應該在同一文件夾作爲構建Sort.cpp

都能跟得上。它將在你的程序運行的'當前工作目錄'中創建。不同的IDE將把它設置爲不同的地方。如果你從Terminal.app運行你的程序,那麼它將是你運行程序時的任何位置。

我找不到任何Output.txt的我的電腦

上。由於默認位置是內某處在Finder〜/圖書館目錄搜索只能找到該文件,如果你選中選項「搜索系統文件夾「,或任何它被稱爲。更好的方法是查看Xcode將當前工作目錄設置爲在您的方案或Xcode的組織者中。