int main(){
int choice;
fstream in, out;
switch(choice)
{
case 1:
filename = s.studentRegister();
out.open(filename.c_str(), ios::out);
out.write((char *)&s, sizeof(Student));
cout<<endl<<"Registered successfully."<<endl;
case 2:
s.studentLogin();
}
}
class Student
{
std::string studentName, roll, studentPassword;
fstream in, out;
public:
std::string studentRegister()
{
cout<<"Enter roll number"<<endl;
cin>>roll;
cout<<"Enter current semester"<<endl;
cin>>ch;
cout<<"Enter your name"<<endl;
cin>>studentName;
cout<<"Enter password"<<endl;
cin>>studentPassword;
return (roll+".dat");
}
void studentLogin()
{
Student s;
cout<<"Enter roll number: "<<endl;
cin>>roll;
cout<<"Enter password: "<<endl;
cin>>studentPassword;
filename = roll + ".dat";
in.open(filename.c_str(), ios::in);
in.read((char *)&s, sizeof(Student));
read.close();
if((studentPassword.compare(s.studentPassword)==0))
{
system("cls");
cout<<"Welcome "<<s.studentName<<"!"<<endl;
displayStudentMenu();
}
else
{
cout<<"Invalid user";
exit(0);
}
}
我的学生班有两个功能:studentRegister()
和studentLogin()
。调用studentRegister时,它接受学生的所有详细信息,然后将相应类的对象写入DAT文件。现在,登录时,我正在尝试使用in.read((char *)&s, sizeof(Student));
然而,这会导致运行时错误并且控制台突然关闭。出了什么问题?
答案 0 :(得分:1)
读写功能与您尝试的方式不同。它们只适用于没有指针的类,但是string有指针,你的类有字符串,所以你不能使用它们。
您将不得不找到一种不同的方式来读取和写入您的数据。这有什么问题
out << studentName << ' ' << roll << ' ' << studentPassword << '\n';
和
in >> studentName >> roll >> studentPassword;`
同样不是您提出的问题,但in
和out
不应在您的Student
课程中声明。它们应该在您使用它们的函数中声明。