Code ghi nhiều dòng vào file nhưng các dòng bị dính vào nhau
hello các bạn , mình có làm một bài tập như thế này
Viết chương trình thực hiện các yêu cầu:
• Mở tập tin mới và nhập vào một số mẫu tin. Mỗi mẫu tin bao gồm các trường: họ tên, tuổi, lương. Quá trình nhập dữ liệu kết thúc khi họ tên nhập vào là rỗng.
• Thêm dữ liệu vào tập tin.
• Mở tập tin để đọc và hiển thị ra màn hình nội dung tập tin.
Đây là code của mình
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define maxten 30
#define maxfile 11
struct hsnv
{
char hoten[maxten+1];
int tuoi;
int luong;
} hoso;
void hienthi(struct hsnv *,int);
void nhap();
void indanhsach();
void them();
char ten_file[maxfile+1];
FILE *fi;
int main()
{
nhap();
indanhsach();
them();
indanhsach();
return 0;
}
void nhap()
{
int i,n;
printf("Nhap ten file
");
gets(ten_file);
if((fi = fopen(ten_file,"wb"))==NULL)
{
printf("Errol , file chua duoc tao
");
exit(1);
}
printf("
Nhap so lieu , muon dung lai nhan Enter khi nhap ten
");
n = 0;
do
{
printf("
Nhap ten: ");
fflush(stdin);
gets(hoso.hoten);
if(strlen(hoso.hoten) ==0) break;
n++;
printf("
Nhap tuoi: ");
fflush(stdin);
scanf("%d",&hoso.tuoi);
printf("
Nhap luong: ");
fflush(stdin);
scanf("%d",&hoso.luong);
getchar();
printf("
");
fwrite(&hoso,sizeof(hoso),1,fi);
}while(1);
fclose(fi);
printf("Ket thuc viec doc file ta co %d phan tu(nguoi)
",n);
}
void indanhsach()
{
int n;
do
{
printf("
Bat dau doc file, nhap ten file: ");
gets(ten_file);
if((fi = fopen(ten_file,"rb"))==0)
{
printf("Errol, nhap lai ten
");
}
}while(!fi);
n = 1;
while(fread(&hoso,sizeof(hoso),1,fi))
{
hienthi(&hoso,n++);
}
fclose(fi);
printf("
Doc xong danh sach trong file
");
}
void hienthi(struct hsnv *hoso,int so_file)
{
int i;
printf("
So ho so: %d",so_file);
printf("
Ten: %s
",hoso->hoten);
printf("
Tuoi: %d
",hoso->tuoi);
printf("
Luong: %d
",hoso->luong);
}
void them()
{
int n;
do
{
printf("
Nhap ten file can them: ");
gets(ten_file);
if((fi = fopen(ten_file,"ab"))==0)
{
printf("Errol, Nhap lai ten file: ");
}
}while(!fi);
do
{
printf("
Nhap ten: ");
fflush(stdin);
gets(hoso.hoten);
if(strlen(hoso.hoten)==0)
break;
n++;
printf("
Nhap tuoi: ");
fflush(stdin);
scanf("%d",&hoso.tuoi);
printf("
Nhap luong: ");
fflush(stdin);
scanf("%d",&hoso.luong);
getchar();
printf("
");
fwrite(&hoso,sizeof(hoso),1,fi);
}while(1);
fclose(fi);
printf("
Ket thuc viec them du lieu vao cuoi file");
}
code thì không sai gì cả, vẫn hiển thị nhập xuất kết quả bình thường, nhưng mà mình gặp lỗi như thế này , khi mà mình mở lại cái file thư mục mà mình đã tạo thì nó không hiển thị giống như mình mong muốn
thay vì nó sẽ hiện tên ,tuổi và lương và sẽ xuống dòng với mỗi phần tử, thì nó lại hiện như thế này.
đó là những nội dung trong file của mình, nó hiện lung tung hết, mình không biết nó bị lỗi gì, mong các bạn giúp mình sữa lỗi này với, xin cảm ơn trước
Mình thấy cả code của bạn chỉ có đúng duy nhất 2 hàm fwrite, cả 2 hàm đều như thế này:
Bạn định viết cái gì với hàm fwrite này?
Bạn nói là:
Thì nó bình thường thiệt mà có “lỗi” là do bạn dùng Notepad mở file đó lên, bạn làm vậy chi? chi vậy nà?
Hỏi dzui nè: bạn biết mode “rb”, “wb” là gì không vậy? Hỏi vậy thôi, chắc bạn cũng biết nó là mode đọc/ghi nhị phân, khi bạn khi cả cấu trúc vào file thì trong đó có cả chữ và số. “Chữ” và “Số” là khác nhau trong việc hiển thị - vì ký tự tương ứng đối với “số” có thể là ký tự không nhìn thấy được. Chỉ vậy thôi :v cho nên, nếu đọc file bình thường thì code không lỗi và đừng có mở file đó lên nữa
mình tưởng mode đọc ghi file nhị phân “wt” “rt” mới là đọc file gi nhị phân mà nhỉ ? :v
‘b’ đã là chữ cái đầu của ‘binary’ rồi.
vâng, mình hiểu rồi thank bác .