Nhập và xuất phân số trong kiểu cấu trúc

Xem giúp em code này sai chỗ nào với ạ, em biên dịch ra toàn báo lỗi cannot convert ‘PhanSo’ to 'PhanSo*

#include <stdio.h>

struct PhanSo
{
    int tu;
    int mau;
};

PhanSo nhapPhanSo()
{
    struct PhanSo a;
    scanf("%d", &a.tu);
    scanf("%d", &a.mau);
    return a;
}

void inPhanSo(PhanSo *a)
{
    printf("%d/%d", (*a).tu, (*a).mau);
}
int main()
{
    struct PhanSo a;
    a = nhapPhanSo();
    inPhanSo(a);
}

Có vẻ như code của bạn là code C, nhưng lại tag C++, mình đã sửa lại thành C.

Trong C thì muốn khai báo kiểu struct thì bạn phải thêm từ khóa struct trước tên kiểu, nên những chỗ dùng PhanSo phải sửa thành struct PhanSo còn không thì dùng typedef.

Còn nữa, hàm inPhanSo tham số nhận vào là một con trỏ, nhưng bạn chỉ truyền vào kiểu PhanSo thông thường.

5 Likes

Tại hàm nhapPhanSo() em sửa lại thành

struct PhanSo nhapPhanSo()
{
    struct PhanSo a;
    scanf("%d", &a.tu);
    scanf("%d", &a.mau);
    return a;
}

Còn tại hàm này em nên sửa lại như thế nào cho đúng ạ.

void inPhanSo(PhanSo *a)
{
    printf("%d/%d", (*a).tu, (*a).mau);
}

Có 2 cách sửa:

  • sửa nguyên mẫu:
    void inPhanSo(struct PhanSo a) {
      // in ra như bthg
    }
    
  • sửa cách gọi hàm:
    inPhanSo(&a); // truyền vào là con trỏ
    

Những cái này đều là kiến thức cơ bản, bạn còn thắc mắc gì k?

4 Likes

Mà Sao em sửa lại rồi vẫn không chạy ạ. :joy:

#include <stdio.h>
struct PhanSo
{
    int tu;
    int mau;
};

struct PhanSo nhapPhanSo()
{
    struct PhanSo a;
    scanf("%d", &a.tu);
    scanf("%d", &a.mau);
    return a;
}

void inPhanSo(&a)
{
    printf("%d/%d", (*a).tu, (*a).mau);
}
int main()
{
    struct PhanSo a;
    a = nhapPhanSo();
    inPhanSo(a);
}

Mình nói là:

cơ mà??

4 Likes

:sweat_smile: Được rồi ạ. Em cảm ơn nhé.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?