请教!!关于写文件的问题。
我想问一下两种不同输入信息的做法,然后写入到文件有什么不同。
做法一:
class A
{
private:
int num;
char name[30];
public:
void getdata();
};
void A::getdata()
{
cout << "输入号码" << endl;
cin >> num;
cout << "输入姓名" << endl;
cin >> name;
//可以进行一些相关判断,确保信息的正确性
}
int main()
{
char reply = 'Y';
A object;
fstream file;
file.open("info.dat",ios::out|ios::app);
whlie (reply == 'Y' || reply == 'y')
{
object.getdata();
//调用了一个成员函数,输入的信息是在一个函数内完成。
file.write((char *)&object,sizeof(object));
cout<<"继续录入吗?(Y/N)";
cin>>reply;
}
file.close;
return 0;
}
做法二:
class A
{
private:
int num;
char name[30];
int error();
public:
void get_num();
void get_name();
};
void A::get_num()
{
char *temp = new char[8];
errorlable_num:
try
{
cout << "输入号码:(不能是字母)";
cin >> temp;
if (atoi(temp) == 0)
{
throw "号码输入错误,请重新输入。";
}else
{
num = atoi(temp);
}
catch(char *error)
{
cout << endl;
cout << "错误信息:" << error << endl << endl;
goto errorlable_NChsum;
}
}
void A::get_name()
{
int errorcode;
cout << "输入姓名:(不能超过30个字符长度)";
cin >> name;
errorcode = error(Hotel_city, "姓名超出范围,请重新输入。");
if (errorcode == 1)
{
get_name();
return;
}
return;
}
int A::error(char info[30] , char strerror[40])
{
try
{
if (strlen(info) > 30 || strlen(info) < 0)
{
throw strerror;
}
}
catch(char *error)
{
cout << endl;
cout << "错误信息:" << error << endl << endl;
return 1;
}
return 0;
}
int main()
{
char reply = 'Y';
A object;
fstream file;
file.open("info.dat",ios::out|ios::app);
whlie (reply == 'Y' || reply == 'y')
{
object.get_num();
cout >> endl;
object.get_name();
//调用了2个成员函数,信息输入在2个函数内完成
file.write((char *)&object,sizeof(object));
cout<<"继续录入吗?(Y/N)";
cin>>reply;
}
file.close;
return 0;
}
现在问题就出来了,为什么用做法一的时候往文件里面写信息就没有问题,很顺利也不出什么错误,只不过在信息的正确性上没下什么功夫,没做出错处理,用了一个函数进行信息输入。
用做法二的时候输入信息做了出错处理,为了让他可以重复输入直到正确为止,函数自己调用自己(不知道这样好不好),可是在写入文件的时候为什么写不进去呢?想不明白一个是把信息一起输入,然后写到文件,另一个是分开输入信息,再写到文件,怎么会第一个可以写进去,第二个写不进去呢?是不是做法二中,这个file.write((char *)&object,sizeof(object));有问题啊?还是整个逻辑上有问题,请告知,万分感谢!!