【问题标题】:Printing output in main, not in the function在 main 中打印输出,而不是在函数中
【发布时间】:2018-08-24 14:07:03
【问题描述】:

我有一个 main 函数,它调用 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;
    }

}

【问题讨论】:

  • 我认为您需要再次询问您的老师他们的真正含义 - 要么在 printNumbers 函数内打印,要么将循环移动到 main 并完全放弃 printNumbers 函数。有那个功能没有意义,但是在main里面打印。
  • 简单:将printNumbers调用替换为函数中使用的实际代码。
  • "如何在 main 中打印输出?"您只需从函数 printNumbers 中取出该循环并将其放入 main
  • 您的老师希望您编写一个名为“printNumbers”的函数,该函数不打印数字?那么它应该以 Dijkstra 的名义做什么呢?范丹戈?
  • 糟糕的教学又来了。

标签: c++ arrays pointers io void


【解决方案1】:

据我了解您的问题:值必须打印在 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::stringnotvoid)的形式返回其结果,然后在main 中打印结果函数调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-31
    • 1970-01-01
    • 1970-01-01
    • 2023-01-23
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多