如何检查c+中是否存在记录+;(数据文件处理)? 我试图检查C++中用户是否有有效的帐号和密码(都是整数类型)。数据使用结构存储在.dat文件中。这就是我已经尝试过的: void printIntroMenu(); void printMainMenu(); void start(); void login(); void createAccount(); char menuInput; int i=0; struct user{ int user_id; int password; }u; int main() { start(); return 0; } void start() { cout<<"\n\n"; cout<<setw(60)<<" Please select an option from the menu below:"; printIntroMenu(); cin>>menuInput; switch(menuInput) { case 'l': login(); break; case 'c': createAccount(); break; case 'q': exit(0); break; default: cout<<"\n\n Wrong Choice!! Valid choices are l,c or q."; start(); } } void createAccount() { ofstream fout; fout.open("abc.dat",ios::app|ios::binary); cout<<setw(60)<<"\n\n Please enter your username (Integer only)"; cin>>u.user_id; cout<<setw(60)<<"\n\n Please enter your password (Integer only)"; cin>>u.password; fout<<u.user_id<<'\n'<<u.password<<'\n'; fout.close(); cout<<setw(60)<<"\n Thank You!! Your Account Has Been Successfully Created."; start(); } void login() { int flag=0; int uid; int pass; ifstream fin("abc.dat",ios::in | ios::binary); cout<<setw(50)<<"Enter your username: "; cin>>uid; cout<<setw(50)<<"Enter your password: "; cin>>pass; while(!fin.eof()) { fin.read((char*)&u,sizeof(user)); if(u.user_id==uid && u.password==pass) { flag=1; cout<<"\n Login Successful!!"; } else{ cout<<setw(60)<<"*************** LOGIN FAILED! ***************"; start(); } } } void printIntroMenu(); void printMainMenu(); void start(); 无效登录(); void createAccount(); char menuInput; int i=0; 结构用户{ int用户标识; int密码; }u; int main() { start(); 返回0; } void start() { 你忘了字符串到数字的转换吗, 因为这个 fin.read((char*)&u,sizeof(user));

如何检查c+中是否存在记录+;(数据文件处理)? 我试图检查C++中用户是否有有效的帐号和密码(都是整数类型)。数据使用结构存储在.dat文件中。这就是我已经尝试过的: void printIntroMenu(); void printMainMenu(); void start(); void login(); void createAccount(); char menuInput; int i=0; struct user{ int user_id; int password; }u; int main() { start(); return 0; } void start() { cout<<"\n\n"; cout<<setw(60)<<" Please select an option from the menu below:"; printIntroMenu(); cin>>menuInput; switch(menuInput) { case 'l': login(); break; case 'c': createAccount(); break; case 'q': exit(0); break; default: cout<<"\n\n Wrong Choice!! Valid choices are l,c or q."; start(); } } void createAccount() { ofstream fout; fout.open("abc.dat",ios::app|ios::binary); cout<<setw(60)<<"\n\n Please enter your username (Integer only)"; cin>>u.user_id; cout<<setw(60)<<"\n\n Please enter your password (Integer only)"; cin>>u.password; fout<<u.user_id<<'\n'<<u.password<<'\n'; fout.close(); cout<<setw(60)<<"\n Thank You!! Your Account Has Been Successfully Created."; start(); } void login() { int flag=0; int uid; int pass; ifstream fin("abc.dat",ios::in | ios::binary); cout<<setw(50)<<"Enter your username: "; cin>>uid; cout<<setw(50)<<"Enter your password: "; cin>>pass; while(!fin.eof()) { fin.read((char*)&u,sizeof(user)); if(u.user_id==uid && u.password==pass) { flag=1; cout<<"\n Login Successful!!"; } else{ cout<<setw(60)<<"*************** LOGIN FAILED! ***************"; start(); } } } void printIntroMenu(); void printMainMenu(); void start(); 无效登录(); void createAccount(); char menuInput; int i=0; 结构用户{ int用户标识; int密码; }u; int main() { start(); 返回0; } void start() { 你忘了字符串到数字的转换吗, 因为这个 fin.read((char*)&u,sizeof(user));,c++,iostream,C++,Iostream,不会得到你们想要的,它会从文件中得到char*格式的数字,而不是int 应该这样做: fin >> u.user_id; fin >> u.password; 您还需要有一个标志。如果记录不在第一个位置,它可能会显示“登录失败”,但记录可能存在于第二个位置。因此,请保留一个标志变量。如果在遍历整个文件后标志变量尚未更新,则打印“登录失败”。谢谢。收到了。我将其替换为“fin>>uid;”,并且“fin>>pass;”。现在代码运行正常。

不会得到你们想要的,它会从文件中得到char*格式的数字,而不是int

应该这样做:

fin >> u.user_id;
fin >> u.password;

您还需要有一个标志。如果记录不在第一个位置,它可能会显示“登录失败”,但记录可能存在于第二个位置。因此,请保留一个标志变量。如果在遍历整个文件后标志变量尚未更新,则打印“登录失败”。

谢谢。收到了。我将其替换为“fin>>uid;”,并且“fin>>pass;”。现在代码运行正常。