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("\nNhap MSHS: ");
		gets(x[i]->MSHS);
		fflush(stdin);
		printf("\nNhap Ho ten: ");
		gets(x[i]->Hoten);
		printf("\nDiem Toan: ");
		scanf("%f",&x[i]->DiemToan);
	    printf("\nDiem Anh: ");
		scanf("%f",&x[i]->DiemAnh);
		printf("\nDiem Van: ");
		scanf("%f",&x[i]->DiemVan);
		printf("\n----------------------------------------");
	}
}
void Xuatdulieu(HOCSINH *x[],int n)
{
	for(int i=0;i<n;i++)
	{
		printf("STT: %d",i+1);
		printf("\nMSHS: %s",x[i]->MSHS);
		printf("\nHo ten: %s",x[i]->Hoten);
		printf("\nDiem Toan: %.2f",x[i]->DiemToan);
		printf("\nDiem Anh: %,2f",x[i]->DiemAnh);
		printf("\nDiem Anh: %,2f",x[i]->DiemVan);
		printf("\n----------------------------------------");
	}
}
void main()
{
    int n;
	HOCSINH *x;
     x = (HOCSINH*)malloc(n*sizeof(HOCSINH));
	printf("\nNhap 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?

void main()
{
    int n;
	HOCSINH *x;
     x = (HOCSINH*)malloc(n*sizeof(HOCSINH));
	printf("\nNhap so luong HS: ");
	scanf("%d",&n);
	Nhapthongtin(x,n);
	Xuatdulieu(x,n);
	getch();

}

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 ->

#include<stdio.h>
#include <iostream>
//#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("\nNhap MSHS: ");
		std::cin.getline(x[i].MSHS,10);
		fflush(stdin);
		printf("\nNhap Ho ten: ");
		std::cin.getline(x[i].Hoten,30);
		printf("\nDiem Toan: ");
		scanf("%f",&x[i].DiemToan);
	    printf("\nDiem Anh: ");
		scanf("%f",&x[i].DiemAnh);
		printf("\nDiem Van: ");
		scanf("%f",&x[i].DiemVan);
		printf("\n----------------------------------------");
	}
}
void Xuatdulieu(HOCSINH *x,int n)
{
	for(int i=0;i<n;i++)
	{
		printf("STT: %d",i+1);
		printf("\nMSHS: %s",x[i].MSHS);
		printf("\nHo ten: %s",x[i].Hoten);
		printf("\nDiem Toan: %.2f",x[i].DiemToan);
		printf("\nDiem Anh: %,2f",x[i].DiemAnh);
		printf("\nDiem Anh: %,2f",x[i].DiemVan);
		printf("\n----------------------------------------");
	}
}
int main()
{
    int n;
	HOCSINH *x;
	printf("\nNhap so luong HS: ");
	scanf("%d",&n);
	x = (HOCSINH*)malloc(n*sizeof(HOCSINH));
	Nhapthongtin(x,n);
	Xuatdulieu(x,n);
	//getch();

}

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.

void main()
{
    int n;
	printf("\nNhap so luong HS: ");
	scanf("%d",&n);
	 HOCSINH *x = (HOCSINH*)malloc(n*sizeof(HOCSINH));
	Nhapthongtin(x,n);
	Xuatdulieu(x,n);
	getch();

}

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

#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
typedef struct//Nen khai bao nhu nay
{
	char MSHS[10],Hoten[30];
	float DiemToan,DiemAnh,DiemVan;
}HOCSINH;
void Nhapthongtin(HOCSINH *x,int n)
{
	int i;
	for(i=0;i<n;i++)
	{
		printf("STT: %d",i);
		printf("\nNhap MSHS: ");
		gets(x[i].MSHS);// co the dung gets((x+i)->MSHS)
		fflush(stdin);
		printf("\nNhap Ho ten: ");
		gets(x[i].Hoten);
		printf("\nDiem Toan: ");
		scanf("%f",&x[i].DiemToan);
	    printf("\nDiem Anh: ");
		scanf("%f",&x[i].DiemAnh);
		printf("\nDiem Van: ");
		scanf("%f",&x[i].DiemVan);
		fflush(stdin);
	}
}
void Xuatdulieu(HOCSINH *x,int n)
{
	int i;
	for(i=0;i<n;i++)
	{
		printf("STT: %d",i+1);
		printf("\nMSHS: %s",x[i].MSHS);
		printf("\nHo ten: %s",x[i].Hoten);
		printf("\nDiem Toan: %0.2f",x[i].DiemToan);
		printf("\nDiem Anh: %0.2f",x[i].DiemAnh);
		printf("\nDiem Anh: %0.2f",x[i].DiemVan);
	}
}
int main()
{
    int n;
	HOCSINH *x;
	printf("\nNhap so luong HS: ");
	scanf("%d",&n);
	fflush(stdin);
    x = (HOCSINH*)malloc(n*sizeof(HOCSINH));
	Nhapthongtin(x,n);
	Xuatdulieu(x,n);
	getch();

}

Bạn xem ở đây Markdown on DNH

À 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ỉ?

1 Like

Là sao ? Câu hỏi không hiểu lắm

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