Bạn thử để lệnh fclose(f) trong void write vào hàm main đi!
Mấy bạn cho mình hỏi tại sao không thể viết được thông tin lên file nhị phân, mặc dù void read thì hoạt động tốt còn ghi thông tin thì không ra, chỉ ra toàn mã ASCII.
Dưới đây là toàn bỗ code mình đã viết, không biết còn chổ nào chưa hợp lý không, mong các bạn giúp đở, cảm ơn nhiều !
Code:#include "stdio.h" #include "string.h" #include "conio.h" #include "iostream.h" #include "stdlib.h" #include "windows.h" struct nhanvien { char hoten[50]; int tuoi; }; void write(FILE *f,nhanvien nv[],int k) { f=fopen("E:\\test.dat","wb+"); if(f==NULL) { cout<<"Cannot create file"; exit(1); } fflush(stdin); //void *s; //s=new nhanvien[k]; for(int i=0;i<k;i++) { fwrite(&nv[i],sizeof(nhanvien),1,f); } //delete s; fclose(f); } void read(FILE *f,int k) { fflush(stdout); f=fopen("E:\test.dat","rb+"); if(f==NULL) { cout<<"Cannot open file"; //exit(1); } void *s; s=new nhanvien[k]; for(int i=0;i<k;i++) { fread(s,sizeof(nhanvien),1,f); printf("%s",s); } delete s; fclose(f); } int main() { FILE *f; unsigned int k; struct nhanvien *nv; cout<<"Nhap so luong nhan vien can nhap thong tin: ";cin>>k; cout<<"\n"; nv= new nhanvien[k]; for(int i=0;i<k;i++) { fflush(stdin); cout<<"Nhap ten nguoi thu "<<i+1<<" : "; gets(nv[i].hoten); cout<<"Nhap tuoi: "; cin>>nv[i].tuoi; } delete nv; write(f,nv,k); read(f,k); getch(); //DeleteFile("E:\test.dat"); }
Đã được chỉnh sửa lần cuối bởi inofeeling : 21-04-2012 lúc 08:37 PM.
My Blog ◙ http://infofeeling.blogspot.com
I ♥ C Forum
Bạn thử để lệnh fclose(f) trong void write vào hàm main đi!
Ý bạn là sao, mình nghĩ đã đóng file lại rồi mà, mình còn ngu trong cái này lắm, các bạn chỉ rỏ xíu nha, với lại đừng chỉ mình dùng namespace mình chưa hiểu nó đâu, cảm ơn mọi người giúp đở !
My Blog ◙ http://infofeeling.blogspot.com
I ♥ C Forum
bó tay luôn
mình cũng không hiểu bạn định làm cái gì đi nữa
mục đích bạn xây dựng hàm đọc file read để làm gì ????
câu lệnh mở file bị sai >> f=fopen("E:\test.dat","rb+");
sau khi nhập xong dữ liệu bạn lại đi >>> delete nv;
sau đó mới ghi vào file thì nv chứa cái gì nữa mà đòi ghi
ghi bằng niềm tin à
cố lên bạn nhé
học thêm lần nữa cho chắc ăn nhé
Ngô Hùng Cường
Birthday: 14/4/1986 - Cư ngụ: Thị trấn Lâm Thao - Phú Thọ
kidteam@gmail.com
Yahoo ID: cuong_dhbk2004
0989696971
0915696971
cái delete nv; là thu hồi bộ nhớ mà chứ mình đâu phải xóa hết dữ liệu đâu, để mình thử xem, cảm ơn bạn nhe
oh, dc rồi nhưng sao nó không ghi luôn tuổi nhỉ, khó hiểu quá
Đã được chỉnh sửa lần cuối bởi inofeeling : 22-04-2012 lúc 12:05 AM.
My Blog ◙ http://infofeeling.blogspot.com
I ♥ C Forum
bạn mở ghi file theo mode nhị phân mà
nếu bạn mở lại file bạn tạo ra bằng notepad thì tất nhiên là không nhìn thấy tuổi rồi
bạn cần phân biệt file nhị phân và file văn bản nhé
Ngô Hùng Cường
Birthday: 14/4/1986 - Cư ngụ: Thị trấn Lâm Thao - Phú Thọ
kidteam@gmail.com
Yahoo ID: cuong_dhbk2004
0989696971
0915696971
Mình đã làm được rồi hehe:
Nhờ một số gợi ý của các bạn mình đã có dòng code hoàn chỉnh và trong sáng ()
Cảm ơn mọi người đã giúp đở !Code:#include "stdio.h" #include "string.h" #include "conio.h" #include "iostream.h" #include "stdlib.h" #include "windows.h" struct nhanvien { char hoten[50]; char tuoi[2]; }; void write(FILE *f,nhanvien nv[],int k) { f=fopen("E:\\test.dat","wb"); if(f==NULL) { cout<<"Cannot create file"; exit(1); } fflush(stdin); for(int i=0;i<k;i++) { fwrite(&nv[i].hoten,sizeof(nhanvien),1,f); fwrite(&nv[i].tuoi,sizeof(nhanvien),1,f); } fclose(f); } void read(FILE *f,int k) { fflush(stdout); f=fopen("E:\\test.dat","rb"); if(f==NULL) { cout<<"Cannot open file"; exit(1); } void *s; s=new nhanvien[k]; cout<<"Thong tin nhan vien ban da nhap la\n"; cout<<"\tHo Ten\t\tTuoi\n"; for(int i=0;i<k;i++) { fread(s,sizeof(nhanvien),1,f); printf("%d.\t %s\t\t ",i+1,s); fread(s,sizeof(nhanvien),1,f); printf("%s \n",s); } fclose(f); } int main() { FILE *f; unsigned int k; struct nhanvien *nv; cout<<"Nhap so luong nhan vien can nhap thong tin: ";cin>>k; cout<<"\n"; nv= new nhanvien[k]; for(int i=0;i<k;i++) { fflush(stdin); cout<<"Nhap ten nguoi thu "<<i+1<<" : "; gets(nv[i].hoten); cout<<"Nhap tuoi: "; gets(nv[i].tuoi); } write(f,nv,k); read(f,k); // delete("E:\\test.dat"); getch(); }
Đã được chỉnh sửa lần cuối bởi inofeeling : 22-04-2012 lúc 12:44 PM.
My Blog ◙ http://infofeeling.blogspot.com
I ♥ C Forum
Các bạn cho mình hỏi cũng về file nhị phân là tại sao ghi rồi nó lại fread không đúng, mình không biết fwrite có vấn đề không nửa. Các bạn giúp giùm.
p.s: fread từ file txt mà mình edit bằng notepad thì nó lại đọc đúng, chắc fwrite có vấn đề mà không biết vấn đề gì !?
Để dễ dàng cho các bạn hình dung vấn đề của mình xin post ảnh cho các bạn xem:
Nhập
nhưng khi fread
Code:#include "stdio.h" #include "string.h" #include "conio.h" #include "iostream.h" #include "stdlib.h" #include "windows.h" struct hanghoa { char mahang[10]; char tenhang[100]; char dvt[10]; float dongia; float thanhtien; float chietkhau; float doanhthu; int soluong; }; void detail(hanghoa hh[],int n) { cout<<"Nhap Thong Tin Chi Tiet Hoa Don Can Xuat\n"; hh=new hanghoa[n]; for(int i=0;i<n;i++) { cout<<"Nhap So Luong: "; cin>>hh[i].soluong; hh[i].thanhtien=hh[i].soluong*hh[i].dongia; hh[i].chietkhau=hh[i].thanhtien*0.05; hh[i].doanhthu=hh[i].thanhtien-hh[i].chietkhau; } } void adm_detail(hanghoa hh[],int n) { cout<<"Nhap Thong Tin Chi Tiet Hang Hoa\n"; fflush(stdin); hh=new hanghoa[n]; for(int i=0;i<n;i++) { fflush(stdin); cout<<"Nhap Ma Hang: "; gets(hh[i].mahang); cout<<"Nhap Ten Hang: ";fflush(stdin); gets(hh[i].tenhang); cout<<"Nhap Don Vi Tinh: "; fflush(stdin); gets(hh[i].dvt);fflush(stdin); cout<<"Nhap Don Gia: "; cin>>hh[i].dongia; } } void write(FILE *f,hanghoa hh[],int k) { f=fopen("E:\\QLHH.txt","wt"); if(f==NULL) { cout<<"Cannot create file"; exit(1); } fflush(stdin); for(int i=0;i<k;i++) { fwrite(&hh[i].mahang,sizeof(hanghoa),1,f); fwrite(&hh[i].tenhang,sizeof(hanghoa),1,f); fwrite(&hh[i].dvt,sizeof(hanghoa),1,f); fwrite(&hh[i].dongia,sizeof(hanghoa),1,f); //fprintf(f,"%s %s %s %s",hh[i].mahang,hh[i].tenhang,hh[i].dvt,hh[i].dongia); } fclose(f); } void read(FILE *f,int k) { fflush(stdout); f=fopen("E:\\QLHH.txt","rt"); if(f==NULL) { cout<<"Cannot open file"; exit(1); } char d[100]; void *s; s=new hanghoa[k]; cout<<"\tMa Hang\t\tTen Hang\t\tDVT\t\tDonGia\n"; for(int i=0;i<k;i++) { fread(s,sizeof(hanghoa),1,f); printf("%d.\t %s\t\t ",i+1,s);//Ma Hang fread(s,sizeof(hanghoa),1,f); printf("%s \t",s);//Ten Hang fread(s,sizeof(hanghoa),1,f); printf("%s \t",s);//DVT fread(s,sizeof(hanghoa),1,f); printf("%f \n",s);//Don Gia } fclose(f); } int main() { hanghoa *hh; FILE *f; int n=1; system("cls"); cout<<"\t\t\t Welcome to VT Passion Shop\n"; cout<<"\t\t\t http:\\infofeeling.blogspot.com\n"; for(int s=0;s<80;s++) printf("%c",3); cout<<"Admin CPanel"; cout<<"\nXin nhap so luong hang hoa can quan ly: ";cin>>n; adm_detail(hh,n); cout<<"Please wait, System is creating database file !"; write(f,hh,n); system("cls"); cout<<"\t\t\t Welcome to VT Passion Shop\n"; cout<<"\t\t\t http:\\infofeeling.blogspot.com\n"; for(int s=0;s<80;s++) printf("%c",3); cout<<"\nDanh Muc San Pham Trong Shop\n"; read(f,n); cout<<"Nhap vao so luong hang hoa\n"; getch(); }
Đã được chỉnh sửa lần cuối bởi inofeeling : 22-04-2012 lúc 03:41 PM.
My Blog ◙ http://infofeeling.blogspot.com
I ♥ C Forum