30/09/2018, 16:22
Lỗi cannot convert parameter trong C
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
struct HocSinh
{
char MSHS[10],Hoten[30];
float DiemToan,DiemAnh,DiemVan;
};
typedef struct HocSinh HOCSINH;
void Nhapthongtin(HOCSINH *x[],int n)
{
for(int i=0;i<n;i++)
{
printf("STT: %d",i);
fflush(stdin);
printf("
Nhap MSHS: ");
gets(x[i]->MSHS);
fflush(stdin);
printf("
Nhap Ho ten: ");
gets(x[i]->Hoten);
printf("
Diem Toan: ");
scanf("%f",&x[i]->DiemToan);
printf("
Diem Anh: ");
scanf("%f",&x[i]->DiemAnh);
printf("
Diem Van: ");
scanf("%f",&x[i]->DiemVan);
printf("
----------------------------------------");
}
}
void Xuatdulieu(HOCSINH *x[],int n)
{
for(int i=0;i<n;i++)
{
printf("STT: %d",i+1);
printf("
MSHS: %s",x[i]->MSHS);
printf("
Ho ten: %s",x[i]->Hoten);
printf("
Diem Toan: %.2f",x[i]->DiemToan);
printf("
Diem Anh: %,2f",x[i]->DiemAnh);
printf("
Diem Anh: %,2f",x[i]->DiemVan);
printf("
----------------------------------------");
}
}
void main()
{
int n;
HOCSINH *x;
x = (HOCSINH*)malloc(n*sizeof(HOCSINH));
printf("
Nhap so luong HS: ");
scanf("%d",&n);
Nhapthongtin(x,n);
Xuatdulieu(x,n);
getch();
}
Lỗi error C2664: ‘Nhapthongtin’ : cannot convert parameter 1 from ‘HOCSINH *’ to ‘HOCSINH *[]’
error C2664: ‘Xuatdulieu’ : cannot convert parameter 1 from ‘HOCSINH *’ to ‘HOCSINH *[]’
Sữa lại như thế nào?
Bài liên quan
Bạn chưa nhập n mà đã dùng malloc cấp phát cho nó rồi à?
Mình không hiểu bạn viết HOCSINH *x[] là gì, bình thường viết HOCSINH *x là được rồi
Mình sửa lại như thế này, dùng compiler bên C++ cho quen mắt thôi. Vấn đề chính ở việc bạn truyền tham số con trỏ vào hàm có tham số mảng con trỏ nên nó báo lỗi. Các trường trong struct không phải là con trỏ nên không dùng dấu ->
Với lại bạn dùng malloc() mà chưa thấy free() ở đâu cả.
sữa lại rồi, cũng vậy thôi.
x*[] mãng gồm nhiều SV mà
Mảng bao nhiêu sinh viên bạn cũng chỉ cần truyền địa chỉ đầu của con trỏ thôi, nó sẽ tìm được những phần tử ngay sau nó. Mảng những con trỏ và con trỏ được cấp phát phần tử là 2 khái niệm hoàn toàn khác nhau. Trước mình cũng hay nhầm.
Con trỏ *x cũng là mảng thôi vì nó trỏ đến vị trí đầu tiên của mảng, các trường bên trong bạn có thể nhập bằng cách dùng con trỏ thay cho mảng và khi đó dùng đến -> thay dấu chấm. Theo mình nghĩ thì *x[] là mảng các con trỏ rồi, khi đó tham số bị truyền sai
Code mình đã sửa và ghi chú 1 chút: http://codepad.org/GBtpbJ8x
Bạn xem ở đây Markdown on diễn đàn
À nhân tiện các bạn cho hỏi đửa code vào thẻ code như nào nhỉ, sao mình ko tìm thấy chức năng ấy nhỉ?
Là sao ? Câu hỏi không hiểu lắm