Lỗi khi đọc dữ liệu từ file vừa ghi

Chào m.n , em có đoạn code :

#include<stdio.h>
#include<string.h>
struct Mathang{
	char maHang[20], tenhang[20], donVi[10];
	int soLuong, donGia;
};
void input(Mathang *&a, int n)
{
	a = new Mathang[n];
	for(int i = 0 ; i < n ; i++)
	{
		printf("\n-----MH thu %d--------\n");
		printf("Ma hang :\n");
		fflush(stdin);
		gets(a[i].maHang);
		
		printf("Ten hang :\n");
		fflush(stdin);
		gets(a[i].tenhang);
		
		printf("Don vi :\n");
		fflush(stdin);
		gets(a[i].donVi);
		
		printf("So luong :\n");
		scanf("%d", &a[i].soLuong);
		
		printf("Don gia :\n");
		scanf("%d", &a[i].donGia);
	}
}

void ghiFile(Mathang *a, int n)
{
	FILE *f;
	f = fopen("Bai2.txt", "wt");
	for(int i = 0 ; i < n ; i++)
	{
		fprintf(f,"%15s%15s%15s%10d%10d\n", a[i].maHang, a[i].tenhang, a[i].donVi, a[i].soLuong, a[i].donGia);
	}
	fclose(f);
}

void docFile(Mathang *a, int n)
{
	FILE *f;
	f = fopen("Bai2.txt", "rt");
	
	for(int i = 0 ; i < n ; i++)
	{
		fscanf(f,"%15s%15s%15s%10d%10d\n",&a[i].maHang, &a[i].tenhang, &a[i].donVi, &a[i].soLuong, &a[i].donGia);
		printf("%15s%15s%15s%10d%10d\n", a[i].maHang,a[i].tenhang, a[i].donVi, a[i].soLuong, a[i].donGia);
	}
	fclose(f);
}

int main()
{
	Mathang *a;
	int n ;
	scanf("%d", &n);
	input(a,n);
	ghiFile(a,n);
	docFile(a,n);
	return 0;
}

đề yêu cầu “Đọc dữ liệu từ file vừa ghi và hiển thị ra màn hình” . M.n xem và sửa lại phần đọc file của em giúp em với ạ, em cứ thấy sai sai sao ý, cảm ơn m.n ạ !

Bạn thử bỏ & xem sao.

3 Likes

Bỏ & bị lỗi không chạy được ạ

Cho mình xem bạn định dạng file read xem thử xem.

2 Likes

là sao ạ?
f = fopen("Bai2.txt", "rt") -> f = fopen("Bai2.txt", "r"); ?

À không, ý mình là nội dung file Bai2.txt của bạn á. :joy:

bbb
hi

mk lười nhập nên nhập v kt cho nhanh @@

Sao lại có cái & ở kia nhỉ.
Mình thử bỏ đi, vẫn chạy bình thường mà. :thinking:

chạy đc nhưng khi ra kq sai b

“Kq sai” của bạn là thế nào nhỉ. :thinking:

  • Ghi được và kết quả k như mong muốn.
  • K ghi được.
  • K đọc được file.

Còn mình thì thấy nếu code như vậy mà ra kq trên của bạn là đúng.

2 Likes

chấm đầu tiên cảu b đó.
có bài thì khi chạy nó sẽ buộc dừng , có bài thì sẽ ra các kq ngẫu nhiên không như mk đã nhập

Lạ nhỉ. Bạn thử chạy code này thử xem. :point_down:

#include<stdio.h>
#include<string.h>
struct Mathang {
	char maHang[20], tenhang[20], donVi[10];
	int soLuong, donGia;
};
void input(Mathang *&a, int n) {
	a = new Mathang[n];
	for(int i = 0 ; i < n ; i++) {
		printf("\n-----MH thu %d--------\n", i + 1);
		printf("Ma hang :\n");
		fflush(stdin);
		gets(a[i].maHang);

		printf("Ten hang :\n");
		fflush(stdin);
		gets(a[i].tenhang);

		printf("Don vi :\n");
		fflush(stdin);
		gets(a[i].donVi);

		printf("So luong :\n");
		scanf("%d", &a[i].soLuong);

		printf("Don gia :\n");
		scanf("%d", &a[i].donGia);
	}
}

void ghiFile(Mathang *a, int n) {
	FILE *f;
	f = fopen("Bai2.txt", "wt");
	for(int i = 0 ; i < n ; i++) {
		fprintf(f,"%15s%15s%15s%10d%10d\n", a[i].maHang, a[i].tenhang, a[i].donVi, a[i].soLuong, a[i].donGia);
	}
	fclose(f);
}

void docFile(Mathang *a, int n) {
	FILE *f;
	f = fopen("Bai2.txt", "rt");

	for(int i = 0 ; i < n ; i++) {
		fscanf(f,"%15s%15s%15s%10d%10d\n",a[i].maHang, a[i].tenhang, a[i].donVi, &a[i].soLuong, &a[i].donGia);
		printf("%15s%15s%15s%10d%10d\n", a[i].maHang,a[i].tenhang, a[i].donVi, a[i].soLuong, a[i].donGia);
	}
	fclose(f);
}

int main() {
	Mathang *a;
	int n ;
	printf("Nhap n: ");
	scanf("%d", &n);
	input(a,n);
	ghiFile(a,n);
	docFile(a,n);
	return 0;
}
1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?