Вывод на печать в основном, а не в функцию - PullRequest
0 голосов
/ 24 августа 2018

У меня есть основная функция, которая вызывает readNumbers для создания динамически распределенного массива длины, запрашиваемого пользователем.Затем этот массив передается в printNumbers, который печатает индекс элемента, затем пробел, затем соответствующее значение элемента, а затем новую строку.

Мой код алгоритмически корректен, однако, мой учительхочет, чтобы вывод печатался внутри main, а не внутри функции.Тем не менее, я запутался, потому что мне сказали, что printNumbers должен иметь возвращаемый тип void - так не будет ли эта функция распечатывать материал, чтобы вы могли видеть этот вывод?Как я могу распечатать вывод в основном?

Main:

#include <iostream>

int * readNumbers(int n);

void printNumbers(int *numbers, int length);

int main (void)
{
    int length;

    std::cout<<"Enter your array length: "<<std::endl;
    std::cin>>length;


    int *arr=readNumbers(length);

    printNumbers(arr,length);

    delete[] arr;

    return 0;
}

Функциональный файл:

#include <iostream>

int * readNumbers(int n)
{

    int *arr=new int[n]; //array dynamically allocated

    for (int i=0; i<n; i++)
    {
        std::cout<<"Enter value: "<<"\n";
        std::cin>>*(arr +i);

    }

    return arr;



}





void printNumbers(int *numbers, int length)
{

    for (int i=0; i<length; i++)
    {
        std::cout<<i<<" "<<*(numbers+i)<<std::endl;
    }

}

1 Ответ

0 голосов
/ 24 августа 2018

Насколько я понимаю, ваш вопрос: значение должно быть напечатано в main, но вызываемая функция должна возвращать void.

Вот одно решение, использующее "параметр out" (я их ненавижу, я не буду использовать их обычно, но с учетом ограничений они являются разумным вариантом):

void printNumbers(int *numbers, int length, std::string &result)
{
    std::stringstream ret;
    for (int i=0; i<length; i++) {
        ret << i << " " << *(numbers+i) << std::endl;
    }
    result = ret.str();
}

int main()
{
    ...
    std::string res;
    printNumbers(arr, length, res);
    std::cout << res;
    ...
}

Альтернативным (ужасным) решением было бы поместить результат в глобальную переменную внутри функции, а затем распечатать содержимое глобальной переменной вmain после вызова функции.Но, пожалуйста, не делайте этого.

Правильное решение состоит в том, чтобы функция возвращала свой результат в виде std::string ( не void), а затемв main просто выведите результат вызова функции.

...