3
Làm sao để trả về hai giá trị trong cùng một hàm C/C++?
1
duytam921120 đã đăng:

Giả sử mình có hàm tính Tổng và đồng thời tính Tích luôn như sau,

int TinhTongVaTinhTich(int a, int b){
    int Tong = a + b;
    int Tich = a * b;

    return Tong;
    //return Tich;
}

Hàm trên chỉ cho phép trả về 1 giá trị, vậy cho mình hỏi làm sao để cùng trả về hai giá trị Tong và Tich ở câu lệnh return?

Chẳng hạn cần lấy 2 giá trị thì mình nghĩ dùng pair<> được mà, nhiều hơn chắc cần dùng đến struct: pair<int,int> ten_ham() { code; return { giá trị 1, giá trị 2}; } trong main mình tạo pair<int,int> a=ten_ham(); để lưu 2 giá trị đấy

Cộng đồng 22.08.2022
thêm bình luận...
3
Hữu Long50 đã đăng:

Bạn không thể trả về cùng lúc hai giá trị trong cùng một hàm với câu lệnh return nhưng nếu như bạn vẫn muốn, thì vẫn còn cách khác, mặc dù có chút hơi phức tạp và ở đây mình dùng cấu trúc struct để lưu hai giá trị của Tong và Tich rồi sau đó ở hàm tính Tổng và Tích mình sẽ trả về cấu trúc struct thay vì từng biến Tong và Tich, cụ thể như sau,

#include <iostream>
using namespace std;

// Khai báo cấu trúc chứa giá trị Tổng và Tích
struct TT {
    int Tong;
    int Tich;
};


// Hàm tính Tổng và Tích
// Input: 2 số nguyên a và b
// Output: Cấu trúc TT như trên thay vì hai biến Tong hoặc Tich riêng lẻ
TT TinhTongVaTinhTich(int a, int b){
    TT A;

    A.Tong = a + b;
    A.Tich = a * b;

    return A;
}

int main(){
    int a = 2;
    int b = 3;

    TT A = TinhTongVaTinhTich(a, b);

    cout << A.Tong << endl; // Tong = 5
    cout << A.Tich << endl; // Tich = 6

    return 0;
}

Các bước mình thực hiện ở đoạn chương trình trên:

  • Tạo một cấu trúc tên TT có hai thành phần là Tong và Tich với kiểu dữ liệu số nguyên.
  • Tạo hàm tính tổng truyền vào hai giá trị a và b, thực hiện tính Tổng và Tích sau đó lưu vào biến cấu trúc A.
  • Ở hàm main(), tạo biến cấu trúc A để nhận giá trị trả về, sử dụng toán tử chấm (.) để lấy giá trị đã tính bên trong cấu trúc ra.

Hope it help...

đã bổ sung 4.6 năm trước bởi
Avatar: Hữu Long Hữu Long50

Mình đã hiểu ý của bạn, cách của bạn có hơi phức tạp nhưng cũng khá hay, thanks bạn nhé.

duytam9211 10.05.2018
thêm bình luận...
2
Commander20 đã đăng:

Bạn không thể trả về 2 giá trị trong cùng một hàm nhưng bạn có thể làm theo cách sau

int Tong;
int Tich;

void TinhTongVaTinhTich(int a, int b, int &Tong, int &Tich)
{
        Tong = a + b;
        Tich = a*b;
}

Sau khi kết thúc hàm thì Biến Tong Tich sẽ là giá trị cần tìm.

Cần dấu & để truyền tham chiếu vào ( hoặc đơn giản là biến sẽ bị thay đổi khi ra khỏi hàm )

Giả sử mình muốn trả về nhiều giá trị hơn nữa thì phải khai báo thêm nhiều biến, như thế có hiệu quả không bạn @Commander. Mình thấy các ngôn ngữ cấp cao khác như Python, Java,... nó trả về đối tượng nào cũng được hết, liệu mình có thể làm như thế trong C/C++ được không bạn nhỉ? Thanks bạn nhé.

duytam9211 10.05.2018
thêm bình luận...
0
Cộng đồng đã đăng:

Khác với các ngôn ngữ lập trình khác, thì một điều rất đáng tiếc là trong ngôn ngữ C++, chúng ta không thể trả về trực tiếp nhiều giá trị trong hàm bằng lệnh return được. Để trả về nhiều giá trị trong C++, chúng ta cần phải trả về các giá trị này một cách gián tiếp thông qua mảng, hoặc là con trỏ mà thôi.

Link tham khảo: Hàm trả về nhiều giá trị trong C++

thêm bình luận...
Bạn đang thắc mắc? Ghi câu hỏi của bạn và đăng ở chế độ cộng đồng (?)