в C ++ с использованием Visual Studio, как я могу создать 3 функции, одну для чтения файла, одну для сортировки файла и одну для вывода отсортированного файла? - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь выполнить задание.это программа, которая считывает данные о продажах из текстового файла, сортирует данные и выводит отсортированные данные во второй файл.Входной файл представляет собой файл значений, разделенных запятыми (CSV), причем первым элементом является количество элементов данных о продажах, которые должны быть обработаны, за которым следует список данных о продажах в одной строке (элементы разделяются запятыми).Каждый элемент данных продаж имеет десятичное число.но я должен сделать это в 4-х функциях, включая main (), и именно здесь у меня больше всего проблем

Пример ввода:

5,453.67,8769.57,221.87,600.28,8123.00

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

int main() {
string filename, newFilename;
ifstream infile("salesData.csv");
//cout << "What file do you want to open? " << endl;
//cin >> filename;
int size = 0;

getSalesData(size, filename);
selectionSortArray(filename, size);
ofstream outputFile;
writeTofile(outputFile, filename);

system("pause");

return 0;
}


double * getSalesData(int &size, string &filename)
{
    ifstream inputfile;
    inputfile.open(filename);
    double * salesData = new double[size];
    inputfile.close();
    return salesData;

}

//******************************************************************
// selectionSortArray
// task: to sort values of an array in ascending order // data in: the array, the array size // data out: the sorted array
//******************************************************************
void selectionSortArray(string &filename, int length){}


// copy data to output file 
void writeTofile(ofstream &outputFile, string x)
{

    outputFile.open(x.c_str());


    outputFile.close();
}

Я ожидаю увидеть пример ввода 5 453,67,8769,57 221,87 600 2 8 8123,00 для сортировки

1 Ответ

0 голосов
/ 18 февраля 2019

Я просто разберусь с вашей главной проблемой.Вы явно боретесь с концепциями передачи параметров в функции и возврата значений из функций.

Ваша функция getSalesData хороша тем, что она возвращает данные о продажах, но вы упустили то, чтоВы должны поймать это возвращаемое значение в переменной в main.Например,

int main() {
    ...
    int size = 0;
    double* salesData = getSalesData(size, filename);
    ...
}

double * getSalesData(int &size, string &filename)
{
    ...
    return salesData;
}

Как только вы захватили возвращаемое значение, вы можете передать его в качестве параметра другим функциям, например,

selectionSortArray(salesData, size);
writeTofile(filename, salesData, size);

Обратите внимание, что вам не нужно передаватьимя файла для функции сортировки, и я только что передал имя файла (а не офстрим) функции записи.Ofstream необходим только в функции записи, поэтому нет необходимости объявлять его в основной функции.

Каждая функция, которую вы пишете, думает, что нужно этой функции в качестве параметров, и что она возвращает в качестве результата.Затем объявите эту функцию только с этими вещами.Переменные, в которых функция нуждается внутренне, должны быть объявлены в самой функции.

Наконец, в вашем коде отсутствуют некоторые прототипы функций, обычно вы помещаете их в начало вашего кода.Вот так

double * getSalesData(int &size, string &filename);
double * selectionSortArray(double* salesData, int size);
void writeTofile(string& filename, double* salesData, int size);

Это позволяет избежать любых ошибок, которые могут возникнуть в связи с необъявленными функциями.

...