一个关于C++文件流操作的问题,高手进来看看代码有什么问题

yidifanhua123456 2010-12-11 11:47:17
我在用C++语言模拟一个银行存储系统,在写到这个改密的部分的时候,我下面的代码在整个项目中能够正常连接和运行,即代码本身没有任何语法错误,但是在执行这个改密代码段时,却是得不到正确结果,我很是纠结,希望有高手能进来看看,帮帮我这个菜鸟,就是在校验输入ID那个地方,我输入一个ID号,然后让其与已经保存在“a.txt”中的ID号相比较,如果相同则可以进行下步的输入新密码的操作,如果不相等则提示“对不起,这个帐户不存在,请重新输入”,可是我即使输入和文件中保存的相同的ID号,程序运行的时候,还是会提示“对不起,这个帐户不存在,请重新输入”,不知是那一部分错误,希望路过的高手给小弟指导一下!

#include<iostream>
using namespace std;
#include"user.h"
#include<shlobj.h>
#include<string.h>
#include<fstream>
char panduan5(int);
void panduan6();
void jiaoyan1();
void inputPwd1();
fstream f;
User gm1,gm2,gm3,gm4;
void gm()
{
MessageBox(0,"您正试图修改账户密码!"," 温馨提示",0);
system("cls");//清屏
printf("请输入需要修改密码的账户的ID:");
for(int i=0;i<17;)
{
gm1.Id[i]=getch();
if(i==15&&gm1.Id[i]==13)
{
gm1.Id[15]='\0';
goto A;
}
if(isdigit(gm1.Id[i]))
{
printf("%c",gm1.Id[i]);
i++;
}
}

if(i==17)
{
panduan5(i);
printf("%c", gm1.Id[i]);
gm1.Id[18]='\0';
}
panduan6();//只允许输入回车键
A: jiaoyan1();
}
//---------------------------------------------------------------------------
char panduan5 (int i)
{
gm1.Id[i]=getch();
if(gm1.Id[17]=='x' || isdigit(gm1.Id[17]))
{
return (gm1.Id[i]);
}

else
{
panduan5(i);
}
}
//------------------------------------------------------------------------------------
void panduan6 ()
{
char s;
s=getch();
if(s==13) { }
else
{
panduan6();
}
}
//---------------------------------------------------------------------------
void jiaoyan1()
{
//进行唯一性校验

f.open("E:\\a.txt",ios::in);
while(!f.eof())
{
f.read((char*)&gm2,sizeof(User));
if(!strcmp(gm1.Id,gm2.Id))
{
MessageBox(0,"对不起,这个帐户不存在,请重新输入!"," 警告",0);
f.close();
gm();
}
inputPwd1();
}
}
void inputPwd1()
{

system("cls");
printf("请输入六位原密码:");
for( int i=0;i<6;i++)
{
gm1.Password[i]=getch();
printf("*");
}
gm1.Password[6]='\0';
printf("\n");
system("pause");
printf("请输入新密码:");
for(int j=0;j<6;j++)
{
gm3.Password[j]=getch();
gm3.Password[6]='\0';
printf("*");
}
system("cls");
printf("请确认输入的新密码:");
for(j=0;j<6;j++)
{
gm4.Password[j]=getch();
gm4.Password[6]='\0';
printf("*");
}
if(strcmp(gm3.Password,gm4.Password)==0)
{
MessageBox(0,"密码修改成功!","温馨提示",0);
f.write((char*)&gm2,sizeof(User));
f.close();
}
else
{
MessageBox(0,"两次输入的密码不一致,请重新输入!","警告!",0);
inputPwd1();
}
}

...全文
86 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yidifanhua123456 2010-12-12
  • 打赏
  • 举报
回复
多谢三楼的仁兄帮我排版,希望大家能指点一下小弟的代码问题,多谢了
luciferisnotsatan 2010-12-12
  • 打赏
  • 举报
回复
单步调试
[co de=C/C++]代码要放中间[/co de]


#include<iostream>
using namespace std;
#include"user.h"
#include<shlobj.h>
#include<string.h>
#include<fstream>
char panduan5(int);
void panduan6();
void jiaoyan1();
void inputPwd1();
fstream f;
User gm1,gm2,gm3,gm4;
void gm()
{
MessageBox(0,"您正试图修改账户密码!"," 温馨提示",0);
system("cls");//清屏
printf("请输入需要修改密码的账户的ID:");
for(int i=0;i<17;)
{
gm1.Id[i]=getch();
if(i==15&&gm1.Id[i]==13)
{
gm1.Id[15]='\0';
goto A;
}
if(isdigit(gm1.Id[i]))
{
printf("%c",gm1.Id[i]);
i++;
}
}

if(i==17)
{
panduan5(i);
printf("%c", gm1.Id[i]);
gm1.Id[18]='\0';
}
panduan6();//只允许输入回车键
A: jiaoyan1();
}
//---------------------------------------------------------------------------
char panduan5 (int i)
{
gm1.Id[i]=getch();
if(gm1.Id[17]=='x' || isdigit(gm1.Id[17]))
{
return (gm1.Id[i]);
}

else
{
panduan5(i);
}
}
//------------------------------------------------------------------------------------
void panduan6 ()
{
char s;
s=getch();
if(s==13) { }
else
{
panduan6();
}
}
//---------------------------------------------------------------------------
void jiaoyan1()
{
//进行唯一性校验

f.open("E:\\a.txt",ios::in);
while(!f.eof())
{
f.read((char*)&gm2,sizeof(User));
if(!strcmp(gm1.Id,gm2.Id))
{
MessageBox(0,"对不起,这个帐户不存在,请重新输入!"," 警告",0);
f.close();
gm();
}
inputPwd1();
}
}
void inputPwd1()
{

system("cls");
printf("请输入六位原密码:");
for( int i=0;i<6;i++)
{
gm1.Password[i]=getch();
printf("*");
}
gm1.Password[6]='\0';
printf("\n");
system("pause");
printf("请输入新密码:");
for(int j=0;j<6;j++)
{
gm3.Password[j]=getch();
gm3.Password[6]='\0';
printf("*");
}
system("cls");
printf("请确认输入的新密码:");
for(j=0;j<6;j++)
{
gm4.Password[j]=getch();
gm4.Password[6]='\0';
printf("*");
}
if(strcmp(gm3.Password,gm4.Password)==0)
{
MessageBox(0,"密码修改成功!","温馨提示",0);
f.write((char*)&gm2,sizeof(User));
f.close();
}
else
{
MessageBox(0,"两次输入的密码不一致,请重新输入!","警告!",0);
inputPwd1();
}
}
ww884203 2010-12-12
  • 打赏
  • 举报
回复
首先的一个问题就是你应该把你的代码放到两个标签中间,不然排版这么乱有50%以上的人不想看
libinfei8848 2010-12-12
  • 打赏
  • 举报
回复

f.open("E:\\a.txt",ios::in);
while(!f.eof())
{
f.read((char*)&gm2,sizeof(User)); //我觉得不是应该是sizeof(User)+1么还需要取到'\0'
if(!strcmp(gm1.Id,gm2.Id))
{
MessageBox(0,"对不起,这个帐户不存在,请重新输入!"," 警告",0);
f.close();
gm();
}

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧