banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Messages posted by: devilmaycry281  XML
Profile for devilmaycry281 Messages posted by devilmaycry281 [ number of posts not being displayed on this page: 0 ]
 

FaL wrote:
@devilmaycry281:
Bạn xem lại ifstream.read xem, ở đây lúc đọc hết thông số của sv thứ 2, eof vẫn chưa được trả về. 

smilie cám ơn anh nha, em sửa được rùi smilie
Chương trình bên dưới em đã biên dịch thành công bằng chương trình code::blocks , nhưng kết quả không như ý muốn, tức là khi xuất ra file text bị thừa kết quả
Ví dụ: Em nhập vào như sau


Code:
Ten tep tin nhi phan:file1
Nhap so hoc sinh :2
STT : 1
Ho ten : Nguyen Van A
Nam sinh : 1989
Que quan : Ha Noi
Mon Toan : 6
Mon Ly : 7
Mon Hoa : 8
STT : 2
Ho ten : Nguyen Van B
Nam sinh : 1990
Que quan : Ha Tay
Mon Toan : 6
Mon Ly : 7
Mon Hoa : 8
Ten tep tin van ban (*.txt) :file2.txt




Thì trong file2.txt lại xuất ra như thế này :

Code:
1 Nguyen Van A 1989 Ha Noi 6 7 8
2 Nguyen Van B 1990 Ha Tay 6 7 8
[color=red][b]2 Nguyen Van B 1990 Ha Tay 6 7 8[/b][/color]


Phần chữ đỏ in đậm là cái mà em không mong muốn in ra, em không hiểu tại sao no' bị thừa ra như vậy, mong mọi người giúp em

Đề bài như sau :

Viết ct nhập vào 1 ds học sinh, mỗi đối tượng gồm các thuộc tính STT, hoten,namsinh, quequan,diem toan,ly,hoa :
+) Mở và cất dữ liệu vào một file nhị phân(tên file dc nhập từ bàn phím)
+)In dữ liệu ra 1 file văn bản(*.txt)(tên file dc nhập từ bàn phím) dưới dạng một ds lớp có các cột tương ứng với các thuộc tính

Bài của em đây :


Code:
#include <iostream.h>
#include <fstream.h>
#include <iomanip.h>
#include <conio.h>
#include <stdlib.h>
class Hocsinh
{
int stt;
char hoten[40];
int namsinh;
char quequan[50];
float toan,ly,hoa;
public:
void Nhap(Hocsinh ,char [],int);
void Xuat(Hocsinh ,char [],int);
};
const char length=30;
void Hocsinh::Nhap(Hocsinh h,char filename[],int n) {
fstream hs;
hs.open(filename,ios::out | ios::binary);
if(!hs)
{
cout << "Khong the tao duoc tep tin " << filename << endl;
exit(1);
}
for(int i=0; i<n; i++)
{
cout ><< endl << "STT : " << i+1<<endl;
h.stt=i+1;
cout ><< "Ho ten : ";
fflush(stdin);
gets(h.hoten);
cout << "Nam sinh : ";
cin >> h.namsinh;
cout << "Que quan : ";
fflush(stdin);
gets(h.quequan);
cout << "Mon Toan: ";
cin >> h.toan;
cout << "Mon Ly: ";
cin >> h.ly;
cout << "Mon Hoa: ";
cin >> h.hoa;
hs.write(reinterpret_cast<char *>(&h),sizeof(Hocsinh));
}
hs.close();
}
void Hocsinh::Xuat(Hocsinh h,char filename[],int n) {
char fname[length];
cout<<"Ten tep tin van ban(*.txt) :";
fflush(stdin);
gets(fname);
ifstream fileIn(filename, ios::in | ios::binary);// Khai báo và mở tệp nguồn
if(!fileIn)
{ // Không mở được tệp nguồn
cout << "Khong the mo duoc tep tin nhi phan "
<< filename << endl;
exit(1);
}
ofstream fileOut(fname,ios::out);// Khai báo và mở tệp đích
if(!fileOut)
{ // Không mở được tệp đích
cout << "Khong the tao duoc tep tin van ban "
<< fname << endl;
exit(1);
}
while(fileIn && (!fileIn.eof())){
fileIn.read(reinterpret_cast<char *>(&h),sizeof(Hocsinh)); // Đọc kí tự từ tệp tin
fileOut <<h.stt ><<" \t"
<< h.hoten << " \t"
<< h.namsinh << " \t"
<< h.quequan << " \t"
<< h.toan << " \t"
<< h.ly << " \t"
<< h.hoa <<endl;
}
fileIn.close();
fileOut.close();
}
int main() {
int n;
Hocsinh h;
char filename[length];
cout><<"Ten tep tin nhi phan :";
fflush(stdin);
gets(filename);
cout<<"Nhap so hoc sinh :";
cin >>n;
h.Nhap(h,filename,n);
h.Xuat(h,filename,n);
getch();
}
Không ai giúp em sửa bài sao?

newshacker wrote:
bạn đăng nhập vào
sau đó chọn mục thứ 2 (mục ở giữa 2 mục)

+ Boot Frozen : sau khi reset máy, hệ thống bị đóng băng (Frozen)
+ Boot Thawed in next (1) restart : trong (1) lần reset máy, hệ thống được mở băng, bạn có thể điều chỉnh số lần theo ý, mặc định là 1
+ Boot Thawed : từ đây về sau, nếu không được chỉnh lại, Deep Freeze không còn tác dụng :showoff: --> mở đóng băng hệ thống không giới hạn số lần reset (hãy chọn lựa chọn này)


"Boot Thawed " đây là mục bạn cần chọn
sau đó ok restart lại máy
sau đó vào phần mềm bạn cài (tức bạn làm như lúc cài đặt )
tiếp theo ban chọn OK UNINSTALL (tức là đồng ý gỡ bỏ chương trình)
chọn ok sau đó đợi chương trình chạy xong restart lại máy là xong
 

Lạy chúa, đã quên pass rùi mà còn làm được như thế này sao ~~~
Thanks...Các anh xem và sửa hộ em (ko biết đúng được mấy phần rùi)
class Array
{
float* dulieu=NULL; //Chỗ khai báo này sai thì phải
int spt=0; //các anh sửa giùm em
public:
Array(int n) //Constructor
{
spt=n;
if(dulieu)
delete[]dulieu;
dulieu = new fload[spt];
}

foat& phantu(int);

fload tong();

~Array(void) //deConstructor
{
if (dulieu)
delete []dulieu;
dulieu=NULL;
}
};


float& Array::phantu(int chiso)
{
return dulieu[chiso];
}


float Array::tong()
{
fload sum =0;
for (int i=0; i<spt; i++)
sum++ = dulieu[i];
return sum;


Học cấp tốc quá lên còn nhiều chỗ chưa hiêu mong các anh chỉ bảo..hi` hi`
Ky` này em học lập trình hướng đối tượng,tưởng ông thầy sẽ dạy, ai ngờ buổi đầu tiên ông ấy đến lớp vứt cho bài tập lớn để làm rồi lên thuyết trình, ông bảo ông ko dạy, phải tự học..hix.
Khổ nỗi muốn học lập trình hướng đối tượng lại phải học qua c++...( em cũng đang tự học được 1, 2 chương đầu rùi , nhưng thời gian gấp quá) thấy trong tờ bài tập lớn ông giáo đưa thấy bài này khó nhất nên nhờ các anh.Mong các anh giúp giùm...em đang tập tọe lập trình thui


Hãy chuyển toàn bộ chương trình sau sang một chương trình hướng đối tượng có chứa một lớp Array
float* dulieu=Null;
int spt=0;

void khoitao_memory(int n)
{
spt=n;
if(dulieu)
delete []dulieu;
dulieu=new float[spt];
}

float& phantu (int chiso)
{
return dulieu[chiso];
}

float tong()

{
float sum=0;
for (int i=0; i<spt; i++)
sum+=dulieu[i];
return sum;
}

void giaiphong_memory()
{
if(dulieu)
delete []dulieu;
dulieu=NULL;
}
 
 

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|