Как работать с аргументами в Xcode

0

новый парень здесь. Я пытаюсь изучить C++ с помощью Mac OS X, и у меня возникают серьезные проблемы с тем, что отладчик работает в Eclipse или Netbeans (не может получить gdb по какой-то сумасшедшей причине), поэтому решил попробовать свои силы в Xcode. У меня есть простая программа сортировки, но не знаю, как получить выходной файл для заполнения. Вот что я сделал до сих пор:

  1. Создал список имен и сохранил его в папке "Сортировка" как "Names.txt".
  2. Зашел на вкладку "схема редактирования" в Xcode и добавил два аргумента: Names.txt и Output.txt.
  3. Запустите программу без ошибок или проблем, но Output.txt не создается.
  4. В Xcode я вытащил Names.txt с "добавлением файла для сортировки", а также создал пустой файл Output.txt и сохранил его в папке "Сортировка". Затем я вытащил Output.txt в Xcode.
  5. Запустите программу и сохраните пустой файл Output.txt.

Вот код как написано:

#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;
}

Я уверен, что код правильный, поскольку он работает в Eclipse... Я просто не знаю, как получить Xcode для создания выходного файла.

Теги:
xcode

1 ответ

2

Проблема почти наверняка заключается в том, что вы не смотрите в рабочий каталог программы. Что там, где "Output.txt" создается, а IIRC по умолчанию он находится в каталоге Xcode, который создается для проекта в области поддержки приложений Xcode внутри вашей папки ~/Library.

Я полагаю, вы можете установить рабочий каталог в схеме. Вы также можете использовать Организатор, чтобы открыть папку, создаваемую Xcode для проекта.

Обратите внимание, что это влияет как на ваш Output.txt, так и на ваш Names.txt; std::ifstream не откроет файл только потому, что вы добавили его в проект Xcode. Вам нужно либо использовать абсолютный путь, либо поместить файл в рабочий каталог.

Он должен быть создан в той же папке, что и Sort.cpp

Неа. Он будет создан в "текущем рабочем каталоге", с которым работает ваша программа. Различные IDE устанавливают, что это разные места. Если вы запустите свою программу из Terminal.app, тогда вы будете в любом месте, где находитесь, когда запускаете программу.

Я не могу найти файл Output.txt на своем компьютере

Поскольку местоположение по умолчанию находится где-то внутри файлов ~/Library, поиск в Finder будет найти файл только в том случае, если вы проверите опцию "папки поисковой системы" или что бы там ни называлось. Лучше просто посмотреть, что Xcode устанавливает текущий рабочий каталог в вашей схеме или в организаторе Xcode.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню