用于返回两个用户输入值的函数

时间:2013-08-15 22:14:54

标签: c++

我希望能够有一个函数,只需从用户获取两个输入值,并返回要使用的main函数的值。

我希望值a和b只驻留在getvals函数中,并作为x和y传递给main函数。

我想我可能会在这里采取错误的方式,因为我经常搜索并找不到任何类似的方法来做到这一点,但任何帮助都会受到赞赏。

#include <iostream>

using namespace std;


int x = 100;
int y = 42;
int result1;
int result2;
int a;
int b;

int getvals(int,int)
{
    cout << "input value a ";
    cin >> a;
    cout << "input value b ";
    cin >> b;

    return a,b;
}

int main()
{
    getvals(x,y);
    result1 = x + y;


    cout << "\n\n";
    cout << " x + y = " << result1;
    return 0;
}

5 个答案:

答案 0 :(得分:8)

您只能从函数返回一个值。幸运的是,您可以在结构或类中包装两个值,并将其作为一个对象返回。这正是std::pair的设计目标。

std::pair<int,int> getvals()
{
    std::pair<int,int> p;
    cout << "input value a ";
    cin >> p.first;
    cout << "input value b ";
    cin >> p.second;

    return p;
}

int main()
{
    std::pair<int,int> p = getvals();
    int result1 = p.first + p.second;
    ...
}

C ++ 11引入了更通用的std::tuple,它允许任意数量的元素。

std::tuple<int,int> getvals()
{
    int a,b;
    cout << "input value a ";
    cin >> a;
    cout << "input value b ";
    cin >> b;

    return std::make_tuple(a,b);
}

int main()
{
    int x,y;
    std::tie(x,y) = getvals();
    ...
}

答案 1 :(得分:4)

使用ab的参考号。

void getvals(int &a, int &b)
{
    cout << "input value a ";
    cin >> a;
    cout << "input value b ";
    cin >> b;
}

这声明getvals()采用两个参考参数。修改对象的引用会修改传递给函数调用的对象。

没有引用,参数将按值传递,这将创建传递给函数的对象的副本。然后,对函数中的参数所做的修改仅影响副本。

或者,您可以使用std::pair<int, int>从函数中返回两个整数值(然后不需要 out-parameters )。您可以手动将firstsecond成员解压缩到变量xy中,也可以实现帮助程序类来为您执行此操作。例如:

std::pair<int, int> getvals () {
    std::pair<int, int> p;
    std::cin >> p.first;
    std::cin >> p.second;
    return p;
}

template <typename T, typename U>
struct std_pair_receiver {
    T &first;
    U &second;
    std_pair_receiver (T &a, U &b) : first(a), second(b) {}
    std::pair<T, U> operator = (std::pair<T, U> p) {
        first = p.first;
        second = p.second;
        return p;
    }
};

template <typename T, typename U>
std_pair_receiver<T, U> receive_pair (T &a, U &b) {
    return std_pair_receiver<T, U>(a, b);
}

int main () {
    int x, y;
    receive_pair(x, y) = getvals();
    //...
}

如果您可以使用C ++ 11,则可以使用更通用的tupletie帮助程序以更干净的方式执行此操作。 Benjamin Lindley的回答说明了这一点。

答案 2 :(得分:2)

你似乎是通过参数返回的一半。你需要改变的是:

void getvals( int& a, int& b )
{
    cout << "input value a ";
    cin >> a;
    cout << "input value b ";
    cin >> b;
}

注意参数名称前面的&,意思是通过引用传递。这意味着当他们改变功能时,他们也会在呼叫者中改变。不需要return

答案 3 :(得分:1)

通过引用将值传递给您的函数,并将其更改为返回void。像这样:

void getvals(int &a,int &b)
{
    cout << "input value a ";
    cin >> a;
    cout << "input value b ";
    cin >> b;
    return;
}

答案 4 :(得分:0)

你只能从一个函数返回一个东西。那个东西可以是一个在某些情况下适当的数组。

通常,Right Thing(TM)将在您的调用函数中声明变量。将对这些变量的引用传递给应该设置它们的函数。使用函数中传递的引用可以在调用者中设置变量,就像返回它们一样。如果你走这条路线,那么让函数返回成功/失败并通过引用处理所有数据输出可能是个好主意。

祝你好运。我在拉你。我们谁都跑不了。