Lỗi incompatible type for argument khi chạy code liên quan đến con trỏ


em gặp lỗi như vậy là không biết sai như nào ạ! a nào có thể xem giúp e được k ạ!

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define max 15
#define maxds 70

//khai bao prototype struct sinh vien
struct sinhvien {
    char hoten[max];
    char mssv[max];
    float diem;
    };
typedef struct sinhvien SinhVien;

//khai bao prototype cho ds sv
struct danhsach {
    SinhVien dssv[maxds];
    int siso;
    };
typedef struct danhsach DanhSach;
// khai bao ham nhap thong tin
void Nhap_Thong_Tin_SV (SinhVien *sv);
// khai bao ham xuat thong tin
void Xuat_Thong_Tin_SV (SinhVien *sv);
//ham nhap thong tin
void Nhap_Thong_Tin_SV (SinhVien *sv) {
    while (getchar()!= '\n');
    printf("\nHo Ten Sinh Vien: ");
    gets(sv->hoten);
    printf("\nMa So Sinh Vien: ");
    gets(sv->mssv);
    printf("\nDiem Sinh Vien: ");
    scanf("%f",&sv->diem);
    }
//ham xuat thong tin sinh vien
void Xuat_Thong_Tin_SV (SinhVien *sv) {
    printf("\n\t\tHo Ten Sinh Vien: %s",sv->hoten);
    printf("\n\t\tMa So Sinh Vien: %s",sv->mssv);
    printf("\n\t\tDiem Sinh Vien: %.2f",sv->diem);
    }
//khai bao danh sach sinh vien
void Danh_Sach_SV (DanhSach *ds);
//ham danh sach sinh vien
void Danh_Sach_SV (DanhSach *ds) {
    printf("Nhap So Luong Sinh Vien: ");
    scanf("%d",&ds->siso);
    for (int i=0; i<ds->siso; i++) {
        printf("\nNhap Thong Tin Sinh Vien Thu %d",i+1);
        Nhap_Thong_Tin_SV(ds->dssv[i]);
        }
    }
//khai bao xuat thong tin sv
void Xuat_Danh_Sach_SV (DanhSach *ds);
//ham xuat danh sach sinh vien
void Xuat_Danh_Sach_SV (DanhSach *ds) {
    for (int i=0; i<ds->siso; i++) {
        printf("Thong Tin Sinh Vien Thu %d",i+1);
        Xuat_Thong_Tin_SV(ds->dssv[i]);
        }
    }
int main() {
    SinhVien *sv = (SinhVien*)malloc(sizeof(SinhVien));
    DanhSach *ds = (DanhSach*)malloc(sizeof(DanhSach));
    DanhSach ds;
    Danh_Sach_SV(ds);
    Xuat_Danh_Sach_SV(ds);
    return 0;
    }

Hàm Nhap_Thong_Tin_SV (SinhVien *sv) của bạn yêu cầu đối số là kiểu con trỏ SinhVien nhưng bạn lại truyền vào kiểu SinhVien -> error: incompatible type for argument 1 of ‘Nhap_Thong_Tin_SV’

Xuat_Thong_Tin_SV(ds->dssv[i]);

Chỗ này cũng tương tự

Trong hàm main:

Khai báo biến con trỏ ds trùng tên với biến ds

1 Like

yes! cảm ơn bạn nhé! mình đã thấy lỗi rồi

bạn có thể cho mình hỏi thêm: mình đã được lỗi và chạy chương trình, nhưng chỉ nhập được đến mã số sv thứ 3 rồi tự out khi mình nhập 4 sv! cho mình hỏi có phải là mình chưa cấp đủ bộ nhớ k nhỉ

Sửa lỗi ở các dòng 50, 59, 65 là có thể chạy được rồi đó bạn.ác Thử lại xem nhé.

1 Like
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define max 15
#define maxds 70

//khai bao prototype struct sinh vien
struct sinhvien {
    char hoten[max];
    char mssv[max];
    float diem;
    };
typedef struct sinhvien SinhVien;

//khai bao prototype cho ds sv
struct danhsach {
    SinhVien dssv[maxds];
    int siso;
    };
typedef struct danhsach DanhSach;
// khai bao ham nhap thong tin
void Nhap_Thong_Tin_SV (SinhVien *sv);
// khai bao ham xuat thong tin
void Xuat_Thong_Tin_SV (SinhVien *sv);
//ham nhap thong tin
void Nhap_Thong_Tin_SV (SinhVien *sv) {
    while (getchar()!= '\n');
    printf("\nHo Ten Sinh Vien: ");
    gets(sv->hoten);
    printf("\nMa So Sinh Vien: ");
    gets(sv->mssv);
    printf("\nDiem Sinh Vien: ");
    scanf("%f",&sv->diem);
    }
//ham xuat thong tin sinh vien
void Xuat_Thong_Tin_SV (SinhVien *sv) {
    printf("\n\t\tHo Ten Sinh Vien: %s",sv->hoten);
    printf("\n\t\tMa So Sinh Vien: %s",sv->mssv);
    printf("\n\t\tDiem Sinh Vien: %.2f",sv->diem);
    }
//khai bao danh sach sinh vien
void Danh_Sach_SV (DanhSach *ds);
//ham danh sach sinh vien
void Danh_Sach_SV (DanhSach *ds) {
    printf("Nhap So Luong Sinh Vien: ");
    scanf("%d",&ds->siso);
    for (int i=0; i<ds->siso; i++) {
        printf("\nNhap Thong Tin Sinh Vien Thu %d",i+1);
        Nhap_Thong_Tin_SV(&ds->dssv[i]);
        }
    }
//khai bao xuat thong tin sv
void Xuat_Danh_Sach_SV (DanhSach *ds);
//ham xuat danh sach sinh vien
void Xuat_Danh_Sach_SV (DanhSach *ds) {
    for (int i=0; i<ds->siso; i++) {
        printf("\nThong Tin Sinh Vien Thu %d",i+1);
        Xuat_Thong_Tin_SV(&ds->dssv[i]);
        }
    }
int main() {
    // SinhVien *sv = (SinhVien*)malloc(sizeof(SinhVien));
    DanhSach *ds = (DanhSach*)malloc(sizeof(DanhSach));
    // DanhSach ds;
    Danh_Sach_SV(ds);
    Xuat_Danh_Sach_SV(ds);
    free(ds);
    return 0;
    }
1 Like

rất cảm ơn bạn! qua đây mình thông được khá nhiều cái hiha <3

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