Передача массива в качестве ссылки в функцию не работает - PullRequest
1 голос
/ 03 октября 2019

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

    #include <iostream>
    #include <cstdlib>
    #include <ctime>
    #include <algorithm>
    using namespace std;

    template <typename T> 
    void arrayIn(T arr[], int size, char word) {

    if (word == 'd') {

        sort(arr, arr + size, greater<>());
    }
     else {

        sort(arr, arr + size);
    }
    return;
}

template <typename O> 
    void arr_out(O arr[], int size) {
    int j;

    for (j = 0; j < size; j++) {
        cout << arr[j] << endl;
        return;
    }
    delete[] arr;
}
int main(void) {
    srand(time_t(NULL));
    int size,i,j;
    char word;
    int *arr1;
    char *arr2;


    cout << "Enter in the size of the array: ";
    cin >> size;
    cout << "How would you like to sort in ascending or descending order?: ";
    cin >> word;
    arr1 = new int[size];
    arr2 = new char[size];

    if (arr1 == 0) {
        cout << "memory allocation error";
        system("pause");
        exit(1);
    }
    cout << "The first array will sort intagers." << endl;
    cout << "not sorted" << endl;
    for (i = 0; i < size; i++) {
        arr1[i] = rand() % 100 + 1;
        cout << arr1[i] << endl;
    }

    arrayIn(arr1, size, word);
    cout << "sorted" << endl;
    arr_out(arr1,size);

    if (arr2 == 0) {
        cout << "memory allocation error";
        system("pause`enter code here`");
        exit(1);
    }

    cout << "the secound array will sort characters." << endl;
    cout << "not sorted" << endl;

    for (j = 0; j < size; j++) {
        arr2[j] = rand() % (126 + 1 - 33) + 33;
        cout << arr2[j] << endl;
    }
    arrayIn(arr2, size, word);
    cout << "sorted" << endl;
    arr_out(arr2, size);

    system("pause");

    return 0;
}

1 Ответ

0 голосов
/ 03 октября 2019

У вас очень простая ошибка в функции arr_out, которая заставляет печатать только первый элемент. Исправьте следующим образом (уберите закомментированную строку):

template <typename O> 
    void arr_out(O arr[], int size) {
    int j;

    for (j = 0; j < size; j++) {
        cout << arr[j] << endl;
    //  return; // This will return after printing the first element!
    }
    delete[] arr;
}
...