Lỗi "[Error] ld returned 1 exit status"

Dưới đây là chương trình của mình ạ :<

#include<stdio.h>
#include<conio.h>
#include<string.h>
#define MAX 100
#define MAXMENU 12



struct ttBanhMi
{
	char tenBanhMi[20];
	char huongvi[7];
	char loaiBanhMi[10];
	char maBanhMi[5];
	int giaBanhMi;
	int soLuongBanhMiSx;
	int soLuongBanhMiBan;
	int soLuongBanhMiConlai;
};
typedef struct ttBanhMi BanhMi;

//menu
void showmenu();
int chonMenu();
void ThucHienMenu();

//chuc mang
void NhapSL(int &n);
void nhapDanhSachBanhMi(BanhMi a[],int n);
void nhapBanhMi (BanhMi &x);
void xuatBanhMi(BanhMi x);
void xuatDanhSachBanhMi (BanhMi a[],int n);
void xuatTheoMau (BanhMi a[],int n);
void sapXepDonGiaTang (BanhMi a[],int n);
void hoanVi (BanhMi &a,BanhMi&b);
int TimMSX (BanhMi a[],int n, char x[]);
void XuatMSX(BanhMi a[], int n);
void ThemBanhMi (BanhMi a[],int &n);
void XoatTaiVTNx (BanhMi a[],int &n,int x);
void XoaMSX (BanhMi a[],int &n);
void SapXepTen (BanhMi a[],int n); 
void BanhMiGiaMAX (BanhMi a[],int n);
int TimVTMAX (BanhMi a[],int n);
int luuDSBM (BanhMi a[], int n );
int docDSBM ( BanhMi a[],int &n); 

void showmenu()
{

		char menu[][59]={
        "**      1. Nhap Thong Tin Banh Mi Vao               **",
        "**      2. Xuat So Luong Banh Mi Da San Xuat        **",
        "**      3. Xoa Thong Tin Banh Mi Da Thay Doi  	    **",
        "**      4. Sap Xep Theo Thu Tu A->Z	            **",
        "**      5. Them Thong Tin Cua Banh Mi Moi	    **",
        "**      6. Tim Banh Mi Gia  MAX                     **",
        "**      7. Tim Kiem Theo Ma Cua Banh Mi	            **",
        "**      8. Xuat Ra Banh Mi Vi Matcha	            **",
        "**      9. Xuat Ra Gia Banh Mi Tang Tu Thap Toi Cao **",
        "**      10.Doc du lieu tu file	                    **",
        "**      11.Luu du lieu tu file			    **",
        "**      12.Thoat				    **",
        "******************************************************"};		
									
		printf("\n******************************************************");
		printf("\n**   CHUONG TRINH QUAN LY BANH MI TOUS les JOUR     **");
		printf("\n******************************************************\n");
	for(int i=0; i<MAXMENU; i++)
	{
		printf("%s\n", menu[i]);
	 } 

}
int ChonMenu()
{
	int chon;
	showmenu();
do{
		printf("\n******************************************************");
		printf("\n**      Ban Hay Chon Chuc Nang Tu 1 Den %d:         **", MAXMENU);
		printf("\n******************************************************\n");		
		scanf("%d", &chon);
		if(chon<1||chon>MAXMENU)
			printf("Gia Tri Khong Hop Le Vui Long Nhap Lai !\n");
		else
			break;		
	}while(true);
	return chon;
}
void ThucHienMenu()
{
	int chon, n=0;
	BanhMi a[MAX];
	do{
		chon=ChonMenu();
		switch(chon)
		{
			case 1:printf ("|| Nhap Danh Sach Cac Loai Banh Mi ||\n");
				NhapSL(n);
				nhapDanhSachBanhMi(a, n);
				break;
			case 2:printf ("|| Chon Chuc Nang Xuat Thong Tin Banh Mi ||\n");
				xuatDanhSachBanhMi(a,n);
				break;
			case 3: printf ("|| Chon Chuc Nang De Xoa Thong Tin Banh Mi ||\n");
				XoaMSX(a,n);
				break;
			case 4: printf ("|| Chon Chuc Nang De Sap Xep Theo Thu Tu A->Z,... ||\n");
					sapXepDonGiaTang (a,n);
			break;
			case 5:printf("|| Chon Chuc Nang Them Thong Tin Cua Banh Mi ||\n");
				ThemBanhMi (a,n);
				break;
			case 6: printf ("|| Choc Chuc Nang Tim Banh Mi Gia  MAX ||\n");
				BanhMiGiaMAX  (a,n);
				break;
			case 7:printf ("|| Chon Chuc Nang Tim Kiem Theo Ma Cua Banh Mi ||\n");
					XuatMSX(a,n);
				break;
			
			case 8:printf ("|| Ban Chon Xuat Ra Banh Mi Vi Matcha ||\n");
				xuatTheoMau (a,n);
				break;
			case 9:printf ("|| Chon Chuc Nang Xuat Ra Gia Banh Mi Tang Tu Thap Toi Cao ||\n");
				sapXepDonGiaTang (a,n);
				break;
			case 10 :printf ("||Chon chuc nang doc du lieu tu file");
				if (docDSBM(a,n)==0)
					printf ("\n Doc file khong thanh cong!!");
				else
					printf ("\nDa Doc file thanh cong!!");
				break;
			case 11 : printf ("|| Chon chuc nang luu du lieu tu file ");
				if (luuDSBM(a,n)==0)
					printf ("\n Luu file khong thanh cong!!");
				else
					printf ("\n Luu file thanh cong !!");
				break;
			case MAXMENU: 	printf("\n######################################################");
							printf("\n##   CHUONG TRINH KET THUC CAM ON BAN DA SU DUNG    ##");
							printf("\n######################################################");
            return;
			
	}
}while(chon!=MAXMENU);    
	printf("\n######################################################");
	printf("\n##   CHUONG TRINH KET THUC CAM ON BAN DA SU DUNG    ##");
	printf("\n######################################################");	
}
void nhapBanhMi(BanhMi &x)
{
	/*ho va ten : Nguyen Duc Vuon 
	20/6/2020
	mota :nhap tt cho BanhMi
	input :x
	output: x*/
	_flushall();
	printf("Nhap ten Banh Mi: ");
	gets(x.tenBanhMi);
	
	printf ("\nNhap Loai Banh Mi(0: Banh Ngot , 1:Banh Man) = ");
	gets(x.loaiBanhMi);
	
	printf ("Nhap Huong Vi Banh Mi: ");
	gets(x.huongvi);
	
	printf ("Nhap Ma Banh Mi: ");
	gets(x.maBanhMi);
	
	printf ("Nhap Gia Banh Mi: ");
	scanf("%d",&x.giaBanhMi);
	printf ("Nhap So Luong Banh Mi San Xuat: ");
	scanf("%d",&x.soLuongBanhMiSx);
	
	printf("Nhap So Luong Banh Mi Ban Ra: ");
	scanf("%d",&x.soLuongBanhMiBan);
	
	printf("Nhap So Luong Banh Mi Con Lai : ");
	scanf("%d",&x.soLuongBanhMiConlai);
}

void xuatBanhMi(BanhMi x)
{
	/* ho va ten:Nguyen Duc Vuon 
	20/6/2020
	mota:xuat ra tt BanhMi
	input :x
	output:x*/
	printf("Ten BanhMi: %s\n ",x.tenBanhMi);
	
	printf("Loai BanhMi: %s\n",x.loaiBanhMi);
	
	printf("Huong Vi BanhMi: %s\n",x.huongvi);
	
	printf("Gia BanhMi: %d\n",x.giaBanhMi);
	
	printf("Ma BanhMi: %s\n",x.maBanhMi);
	
	printf("So Luong BanhMi sx: %d\n",x.soLuongBanhMiSx);
	
	printf("So Luong BanhMi Ban Ra  :%d\n",x.soLuongBanhMiBan);
	
	printf("So Luong BanhMi Con lai: %d\n",x.soLuongBanhMiConlai);
}
void nhapDanhSachBanhMi(BanhMi a[],int n)
{
	/* ho va ten:Nguyen Duc Vuon 
	20/6/2020
	motta: nhap danh sach  tt cua BanhMi
	intput:danh sach BanhMi
	output:khong*/
	for(int i=0; i<n; i++)
	{
		printf("Nhap Mat Hang Thu %d:\n", i+1);
		nhapBanhMi(a[i]);
	}
}
void xuatDanhSachBanhMi(BanhMi a[], int n)
{
	/*ho va ten :Nguyen Duc Vuon 
	20/6/2020
	mo ta: xuat danh sach tt cua BanhMi
	intput: khong
	output: danh sach BanhMi*/
	for(int i=0; i<n; i++)
	{
		xuatBanhMi(a[i]);
		printf("\n");
	}
}
void NhapKT(int &n)
{
	/*ho va ten :Nguyen Duc Vuon
	20/6/2020
	mo ta: nhap kich thuoc so luong BanhMi
	input : so luong BanhMi
	output : khong */
	do{
		printf("\nNhap vao so luong mat hang [0..%d]: ", MAX);
		scanf("%d", &n);
		if(n<0||n>MAX)
			printf("Nhap lai so luong!!!\n");
		else
			break;
	}while(1);
}
void HoanVi(BanhMi &a, BanhMi &b)
{
	/*ho va ten :Nguyen Duc Vuon
	20/6/2020
	mo ta : hoan vi vi tri a va b
	input khong
	output khong*/
	BanhMi tam=a;
	a=b;
	b=tam;
}
int TimMSX (BanhMi a[],int n, char x[])
{
	/*ho va ten :Nguyen Duc Vuon
	20/6/2020
	mo ta : tim vi tri muon tim 
	input khong
	output :vi tri x*/
	for (int i=0;i<n;i++)
	{
		if (stricmp(a[i].maBanhMi, x)==0)
			return i;
	}
	return -1;
}		         
void XuatMSX (BanhMi a[], int n)
{
	/*ho va ten :Nguyen Duc Vuon
	20/6/2020
	mo ta :xuat ra vi tri muon tim
	input : vi tri muon tim
	output: vi tri x*/
	char x[5];
	_flushall();
	printf ("\n Nhap VAo Ma So Banh Mi Can Tim = ");
	gets(x);
	
	int vt=TimMSX(a,n,x);
	if (vt==-1)
	{
			printf ("Ma Banh Mi Khong Khong hop Le = %s",x);
	}
	else
	{
		printf("Thong Tin Ve Ma Banh Mi Can Tim La %s:\n",x);
		xuatBanhMi(a[vt]);
	}
}
void XoatTaiVTNx (BanhMi a[],int &n,int x)
{
	/*ho va ten :Nguyen Duc Vuon
	20/6/2020
	mo ta : xoa thong tin tai vi tri x
	input :khong
	output:khong*/
	for (int i=x;i<n-1;i++)
	{
		a[i]=a[i+1];
	}
	n--;		         
}

void XoaMSX (BanhMi a[],int &n)
{
	/*ho va ten :Nguyen Duc Vuon
	20/6/2020
	mo ta : xoa thong tin BanhMi
	input :thong tin BanhMi
	output:xoa thong tin BanhMi neu co */
	char x[5];
	_flushall();
	printf ("\nNhap Ma So Loai Banh Mi Muon Xoa = ");
	gets(x);
	
	int vt=TimMSX(a,n,x);
	if (vt==-1)
		printf ("\nMa So Loai Banh Mi Khong Hop Le %s",x);
	else
		{
			XoatTaiVTNx(a,n,vt);
			printf ("\nThong Tin Loai Banh Mi Co Ma So La  %s: \n",x);
		}
}		         
void ThemBanhMi (BanhMi a[],int &n)
{
	/*ho va ten :Nguyen Duc Vuon
	20/6/2020
	mota: them BanhMi
	input:BanhMi can then 
	output: khong*/
	BanhMi x;
	printf ("\nBanh Mi Can Them La : \n");
	nhapBanhMi(x);
	
	a[n]=x;
	n++;
}
void sapXepDonGiaTang (BanhMi a[],int n)
{
	/*ho va ten :Nguyen Duc Vuon
	20/6/2020
	mota : sap xep gia BanhMi theo gia tri tang dan 
	input : khong
	ouput:khong*/
	for(int i=0; i<n-1; i++)
	{
		for(int j=i+1; j<n; j++)
		{
			if(a[i].giaBanhMi>a[j].giaBanhMi)
				HoanVi(a[i], a[j]);
		}
	}
}
void SapXepTen (BanhMi a[],int n)
{
	/*ho va ten :Nguyen Duc Vuon
	20/6/2020
	mota: sap xep ten cua BanhMi 
	input: khong
	output: khong*/
	for (int i=0;i<n;i++)
	{
		for (int j=i+1;j<n;j++)
		{
			if (stricmp (a[i].tenBanhMi,a[j].tenBanhMi)==1)
				HoanVi(a[i],a[j]);
		}
	}
}	
void xuatTheoMau(BanhMi a[],int n)
{
	/*ho va ten :Nguyen Duc Vuon
	20/6/2020
	mota: xuat BanhMi co vi Matcha 
	input: khong
	output:BanhMi vi Matcha*/
	for(int i=0; i<n; i++)
	{
		if(stricmp(a[i].loaiBanhMi, "xanh")==0)
		{
			xuatBanhMi(a[i]);
			printf("\n");
		}
	}
}	      		         
int TimVTMAX (BanhMi a[],int n)
{
	/*ho va ten :Nguyen Duc Vuon
	20/6/2020
	mota: tim vi tri gia BanhMi max
	input:khong
	output:khong*/
	int VTMAX=0;
	for (int i=1;i<n;i++)
	{
		if (a[i].giaBanhMi>a[VTMAX].giaBanhMi)
			VTMAX=i;
	}
	return VTMAX;
}
void BanhMiGiaMAX (BanhMi a[],int n)
{
	/*ho va ten :Nguyen Duc Vuon
	20/6/2020
	mota: xuat ra BanhMi co gia max
	input:khong
	output: BanhMi co gia max*/
	int vt=TimVTMAX (a,n);
	printf ("\n Banh Mi Co Gia Cao Nhat : \n");
	xuatBanhMi(a[vt]);
}
int luuDSBM (BanhMi a[], int n )
{
	char fileName [MAX];
	_flushall ();
	printf ("\nNhap vao ten file can luu = ");
	gets(fileName);
	
	FILE *f= fopen (fileName,"wb");
	if (f==NULL)
		return 0;
		fwrite (a, sizeof(BanhMi),n,f);
		
		fclose(f);
		return 1;
}
int docDSBM ( BanhMi a[],int &n)
{
	char fileName[MAX];
	_flushall();
	printf ("\nNhap vao ten file can luu = ");
	gets (fileName);
	
	FILE*f= fopen(fileName,"rb");
	if (f==NULL)
		return 0;
	n=0;
	while (fread(&a[n],sizeof(BanhMi),1,f)>0)
	{
		n++;
	}
	fclose(f);
	return 1;
}
int main ()
{
	ThucHienMenu();
	return 0;
}

bạn phải tự mình học cách debug đi thôi. tìm ra đại khái cái bug ở đâu rồi mang đi hỏi thì còn ok, chứ mà mang cả mớ code lên thì chẳng mấy ai đọc đâu


https://www.cprogramming.com/debugging/valgrind.html
cái này ông thầy của mình viết, bạn thử dùng google translate xem đọc có hiểu ko, mình thấy nó khá tốt nên chia sẻ thôi
https://m.heise.de/developer/artikel/Einfuehrung-in-die-Arbeit-mit-Valgrind-und-Memcheck-Teil-1-2480976.html?seite=all.

1 Like

cái này nó bị lỗi ở phần void NhapSL(int &n); á bạn… nãy mình để voi NhapKT (int &n); thì không bị lỗi còn để SL thì nó xảy ra bug :<
cơ mà dù sao cũng cảm ơn ông về cái link nha

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