如何通过函数传递多个参数?

问题描述 投票:0回答:3

我正在尝试编写一个程序,让用户输入三个数字,该程序将计算用户输入了多少个正数

#include <iostream>

int enterInteger()
{
    int a, b, c{};
    std::cout << "Enter your interger: ";
    std::cin >> a;

    std::cout << "Enter your interger: ";
    std::cin >> b;

    std::cout << "Enter your interger: ";
    std::cin >> c;

    return a, b, c;
}

void if_fun(int a, int b, int c, int counter)
{
    if (a > 0)
        std::cout << "InProgress " << counter + 1 << std::endl;

    if (b > 0)
        std::cout << "InProgress " << counter + 1 << std::endl;

    if (c > 0)
        std::cout << "InProgress " << counter + 1 << std::endl;

}

int main()
{
    int num{ enterInteger() };

    if_fun(num);
}

当我尝试编译代码时,我收到以下错误:

Error (active)  E0165   too few arguments in function call  Iflesson        
Error   C2660   'if_fun': function does not take 1 arguments    Iflesson    

我试图在 if_fun 中发起争论

int main()
{
    int num{ enterInteger() };

    if_fun(num1, num2, num3, 4);
}

不出所料,关于未定义的参数存在错误。所以在功能上

if_fun() 

程序将1个整数添加到agrument

counter
,它应该是正数的总数

所以,我被解决方案困住了,无法识别我应该如何更改我的代码才能像我想的那样工作

c++ function void
3个回答
1
投票

一个函数只能返回一个值,如果你想从一个函数中返回三个整数那么最简单的方法就是使用三个引用参数

void enterInteger(int& a, int& b, int& c)
{
    std::cout << "Enter your interger: ";
    std::cin >> a;

    std::cout << "Enter your interger: ";
    std::cin >> b;

    std::cout << "Enter your interger: ";
    std::cin >> c;
}

要调用此函数,您需要在

main
中声明三个变量,并将它们作为参数传递。

int main()
{
    int num1, num2, num3;
    enterInteger(num1, num2, num3);
    ...
}

现在由于某种原因,即使

if_fun
函数只返回一个值,您也创建了函数
void
。简单的事情是让函数返回一个
int
.

int if_fun(int a, int b, int c)
{
    int counter = 0;
    if (a > 0)
        std::cout << "InProgress " << counter + 1 << std::endl;

    if (b > 0)
        std::cout << "InProgress " << counter + 1 << std::endl;

    if (c > 0)
        std::cout << "InProgress " << counter + 1 << std::endl;

    return counter;
}

你像这样从 main 调用这个函数

int main()
{
    ...
    int count = if_fun(num1, num2, num3);
}

现在

if_fun
功能仍然需要工作,但这是一个开始。


1
投票

许多用于学习 C++ 的(在线)资源都已过时。 学习 cpp 的好来源是:最近的 C++ 书籍 或访问 https://www.learncpp.com/(相当不错,而且是最新的)。 对于 C++ 参考资料,请使用:cppreference。在您从这些来源学习了 C++ 基础知识后,请定期查看 C++ 核心指南 以了解最新指南。

这是您在当前 C++ 中尝试执行的操作的示例 (我在 count_if 中省略了 https://en.cppreference.com/w/cpp/language/lambda 的使用,并提供了一个自由函数谓词)

#include <algorithm>
#include <vector>
#include <iostream>

// predicate (a function returning a bool)
bool is_positive(const int value)
{
    return value > 0;
}

int main()
{
    std::vector<int> values(3); // 3 integers

    // for repeated things use loops
    // in this case a range based for loop (they cannot run out of bound
    // like regular for loops)
    // https://en.cppreference.com/w/cpp/language/range-for
    // auto : https://en.cppreference.com/w/cpp/language/auto compiler deduces type
    // & is a reference : https://isocpp.org/wiki/faq/references
    for (auto& value : values)
    {
        std::cout << "enter a number : ";
        std::cin >> value;
    }

    std::cout << "Number of positive numbers is : ";

    // from algorithm header : https://en.cppreference.com/w/cpp/algorithm/count
    std::cout << std::count_if(values.begin(), values.end(), is_positive);

    return 0;
}

0
投票

你不能返回多个变量,但是你可以建立一个聚合类型并返回它的一个实例作为你的一个变量。

struct integers
{
    int a;
    int b;
    int c;
};
integers enterIntegers() // note the slight name change. With enterInteger I would
                         // expect only one integer to be input.
{
    integers values;
    std::cout << "Enter your integer: "; // note typo fix
    std::cin >> values.a;

    std::cout << "Enter your integer: ";
    std::cin >> values.b;

    std::cout << "Enter your integer: ";
    std::cin >> values.c;
    return values;
}

如果您的工具是最新的,您还可以利用 Structured Bindings 并获得您想要的东西:

auto enterInteger()
{
    int a, b, c;
    std::cout << "Enter your interger: ";
    std::cin >> a;

    std::cout << "Enter your interger: ";
    std::cin >> b;

    std::cout << "Enter your interger: ";
    std::cin >> c;

    return std::tuple{a, b, c};
}

用法:

auto [a, b, c] = enterInteger();
© www.soinside.com 2019 - 2024. All rights reserved.