如何在主功能中打印数字?

时间:2020-04-09 18:30:54

标签: c++

我是c ++语言的新手。我正在尝试使用函数解决问题。我必须打印五角形数字,直到输入整数,但是当函数返回值时,它只打印一个值。我希望对此有所帮助。

#include<iostream>
using namespace std;
int pent(int num){
    int p;
    for(int i=1;i<=num;i++){
        p=(i*(3*i-1)/2);
    }
    return p;
}

int main(){
    int num;
    cin>>num;
    int sender=pent(num);
    cout<<sender<<endl;
    return 0;
}

2 个答案:

答案 0 :(得分:2)

您的函数返回int,它是一个整数。要返回更多,可以使用std::vector。您可能不熟悉它,所以我会给您一些提示...

最简单的构造函数创建一个没有条目的向量:

std::vector<int> x;

您可以通过reserve为元素保留空间:

x.reserve(num);

向量仍然没有元素,但是它已经分配了足够的空间来容纳num个元素。这很重要,因为当我们添加元素时,向量将增长,并且可能需要将所有元素复制到内存中的其他位置。我们可以通过预先预留足够的空间来避免这种频繁的重新分配。

要向向量添加元素,可以使用push_back

x.push_back(42);

最终要打印矢量的所有元素,我们可以使用range-based for loop

for (auto element : x) std::cout << element << " ";

因此您可以像这样重写代码:

#include <iostream>
#include <vector>

std::vector<int> pent(int num){
    std::vector<int> result;
    result.reserve(num);
    for(int i=1;i<=num;i++){
        result.push_back(i*(3*i-1)/2);
    }
    return result;
}

int main(){
    int num;
    std::cin >> num;
    auto sender = pent(num);
    for (auto number : sender) std::cout << number << " ";        
}

答案 1 :(得分:0)

在您的程序中,从pent()函数中,您仅返回最后的计算值。在过去,您将覆盖变量p。

因此,@ asmmo建议采用一种方法在pent()函数中进行打印。 或者,您可以将向量传递给pent()函数并在其中存储值,然后将其打印在main函数中。

供您参考:

void pent(int num, vector<int> &arr) {
    int p;
    for (int i = 1; i <= num; i++) {
        arr[i-1] = (i*(3 * i - 1) / 2);
    }
}

int main() {
    int num;
    cin >> num;
    vector<int> arr(num);
    pent(num, arr);
    for (int i = 0; i < num; i++) {
        cout << arr[i] << endl;
    }
    return 0;
}
相关问题