Mình đọc/ghi file nhị phân xong in ra màn hình thì nó hiện chữ linh tinh

mình in ra màn hình thì nó hiện chữ linh tinh, mình sai ở đâu ai chỉ mình với !

#include <stdio.h>
#include <conio.h>
#include <fstream>

struct sv
{
	char ht[30];
	int diem;
};
void ghifile(sv x)
{
	FILE *f;
	f=fopen("sv.txt","wb");
	if(f!=NULL)
	{
		fwrite(&x,sizeof(sv),1,f);
		fclose(f);		
	}
}
void nhap(sv x)
{
	printf("\nNhap ho ten: ");fflush(stdin);gets(x.ht);
	printf("\nDiem:");scanf("%d",&x.diem);
}
void docfile(sv x)
{
	FILE *f;
	f=fopen("sv.txt","rb");
	if(f!=NULL)
	{
		fread(&x,sizeof(sv),1,f);
	}
	printf("\n%s  %d",x.ht,x.diem);
}
main()
{
	sv x;
	nhap(x);
	ghifile(x);
	docfile(x);
}

Linh tinh là do x nhận vào hàm ghifile là một trị rác, bởi vì x trong hàm nhap là value parameter, nên sau khi thực hiện nhap x trong main vẫn không thay đổi. Bạn nên dùng con trỏ đối với x trong hàm nhap.

2 Likes

Cảm ơn bạn rất nhiều :smiley:

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