2014-11-08 2 views
0

두 개의 정수를 취하여 x를 (a + b)로, y를 (a * b)로 반환하는 함수가있는 코드를 작성해야합니다. y를 출력합니다. 왜 x를 출력하지 않습니까?1 함수에서 2 개의 정수를 반환하고 출력하는 경우

#include <iostream> 
using namespace std; 

int math (int a, int b) { 
    int x, y; 

    x = a + b; 
    y = a * b; 

    return x, y; 
} 

int main() { 

    cout << math (5,3); 

    getchar(); 
    getchar(); 

    return 0; 
} 

답변

1

라인

return x, y; 

는 기대하지 않습니다. comma operator은 마지막 쉼표 뒤의 값 (이 경우 y) 만 반환합니다. 여러 값을 반환하려면 struct 또는이 둘을 모두 포함하는 클래스를 사용해야합니다.

3

반환 유형 mathint이므로 반환하는 값은 단일 정수입니다.

표현식 x, ycomma operator을 사용합니다. 쉼표 연산자는 x을 평가하고 해당 값을 버린 다음 y을 평가하여 반환합니다. 즉, return x, yreturn y과 같습니다.

std::pair<int,int>을 사용하여 정수 쌍을 반환 할 수 있습니다.

+0

[std :: tie()'] (http://en.cppreference.com/w/cpp/utility/tuple/tie) –

+0

@BillLynch'std :: tie'는 어떻게 도움이됩니까? 이리? –

+0

당신은 정말로 그가'std :: pair'를 사용한다고 제안하고 싶지 않습니까? 정말로 '첫 번째'와 '두 번째'가 필드의 적절한 이름이라고 생각합니까? (실제로'std :: pair'를 사용하면 코드를 유지해야하는 경우에는 좋은 해결책이 될 수 없습니다.) –

0

한 가지만 반환 할 수 있습니다. 그것들을 구조체에 넣을 수 있습니다. 간단한 예.

struct xy { 
    int x; 
    int y; 
}; 

xy math(int a, int b) { 
    xy pair; 
    int x, y; 
    pair.x = a + b; 
    pair.y = a * b;  
    return pair; 
} 
+1

왜 std :: pair입니까? –

0

두 가지 이상의 값을 반환하는 함수를 만드는 방법은 두 가지가 있습니다. 첫번째 매개 변수를 사용하는 것, 하나의 참조 또는 포인터 :

void 
math(int a, int b, int& sum, int& product) 
{ 
    sum = a + b; 
    product = a * b; 
} 

int 
main() 
{ 
    int s; 
    int p; 
    math(5, 3, s, p); 
    std::cout << s << ' ' << p << std::endl; 
    return 0; 
} 

다른 하나는 두 값을 포함하는 클래스를 정의한다 : 대부분의 경우

struct MathResults 
{ 
    int sum; 
    int product; 
}; 

MathResults 
math(int a, int b) 
{ 
    return MathResults{ a + b, a * b }; 
} 

std::ostream& 
operator<<(std::ostream& dest, MathResults const& value) 
{ 
    dest << value.sum << ' ' << value.product; 
} 

int 
main() 
{ 
    std::cout << math(5, 3) << std::endl; 
    return 0; 
} 

을, 제 2 용액은이고 선호된다.

관련 문제