打印输出在主要,不在功能

时间:2018-08-24 14:07:04

标签: c++ arrays pointers io void

我有一个主要函数,该函数调用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 :(得分:3)

据我所知,您的问题是:必须在main中打印值,但调用的函数必须返回void

这里是一个使用“输出参数”的解决方案(我讨厌它们,通常不会使用它们,但考虑到约束条件,它们是一个合理的选择):

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)的形式返回结果,然后以{{1} }仅打印函数调用的结果。