新手,帮我看看我写的这个c++程序吧???

pengpeng5047 2008-10-23 10:28:23
void Account::mima()
{
for(i=0;i<3;i++)
{
cout <<"请输入原始密码:";
cin.getline(mima1,7);
ifstream infile("d:\\mima\\1.txt",ios::in);
if(!infile)
{
cerr <<"无法打开文件!错误!";
exit(1);
}
infile.getline(mima0,7);
infile.close();
if(strcmp(mima0,mima1)==0)
{
cout <<"请输入新密码:\n";
cin.getline(mima0,7);
ofstream outfile("d:\\mima\\1.txt",ios::out);
if(!outfile)
{
cerr <<"文件无法打开!错误!\n";
exit(1);
}
outfile <<mima0;
cout <<"密码修改成功!\n";
outfile.close();
exit(1);
}
else
if(i<2)
cout <<"密码错误,请重新输入\n";
else
{
cout <<"对不起,密码输入错误超过3次,系统自动退出\n";
exit(1);
}
}

}

这是我编写的密码验证及修改的函数:接受一个六位密码,和保存在文件中的初始密码进行比较,一致可以进行修改,不一致允许重新输入,但错误3次以上就自动退出。我运行时不等我输入任何信息就提示“输入错误,重新输入”,然后可以进行第二次的循环,为什么第一次的输入操作被跳过去了呢?(我是在类里定义的)
...全文
119 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
太乙 2008-10-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 pengpeng5047 的回复:]
引用 2 楼 freshairfly 的回复:
C/C++ codevoid Account::mima()
{
for(i=0;i <3;i++)
{
cout < <"请输入原始密码:";
fflush(stdin); // 加上试试
cin.getline(mima1,7);
ifstream infile("d:\\mima\\1.txt",ios::in);
if(!infile)
{
cerr < <"无法打开文件!错误!";
exit(1);
}
infile.getline(…
[/Quote]

对输入流置位!

在fflush(stdin);的后面加上cin.clear();cin.sync();
pengpeng5047 2008-10-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 freshairfly 的回复:]
C/C++ codevoid Account::mima()
{
for(i=0;i<3;i++)
{
cout <<"请输入原始密码:";
fflush(stdin); // 加上试试
cin.getline(mima1,7);
ifstream infile("d:\\mima\\1.txt",ios::in);
if(!infile)
{
cerr <<"无法打开文件!错误!";
exit(1);
}
infile.getline(mima0,7);
infile.close();
if(…
[/Quote]
谢谢大家的关注,你好,我加了fflush(stdin); 这句我目前的问题解决了。但是一次不经意的输入,我又发现了新的问题:有一次我在输入密码时无意中输入了7位,我发现,这种状态下又有两种情况:1.当这7位密码中前6位不是正确密码时,会直接跳过第二次和第三次的输入操作,只输出“密码错误”;2.当这7位密码中前6位时正确密码时,会进入死循环,不停的输入信息。请问这又是怎么回事呢?感谢!!!
小马喝水 2008-10-23
  • 打赏
  • 举报
回复
下面是我改的,因为用getline当你的输入的数字位数大于6时,
由于输入的缓冲区没被清空它会把多余的数字当做你第二次的输入,
如果是大于12的话又会当做是第三次的输入
所以才会出现你说的情况,所以楼主输入密码最好用cin 的,
void mima()
{
for(i=0;i<3;i++)
{
cout <<"请输入原始密码:";
cin>>mima1;
ifstream infile("d:\\mima\\1.txt",ios::in);
if(!infile)
{
cerr <<"无法打开文件!错误!";
exit(0);
}
infile.getline(mima0,7);
infile.close();
if(strcmp(mima0,mima1)==0)
{
cout <<"请输入新密码:\n";
cin>>mima0;
ofstream outfile("d:\\mima\\1.txt",ios::out);
if(!outfile)
{
cerr <<"文件无法打开!错误!\n";
exit(0);
}
outfile <<mima0;
cout <<"密码修改成功!\n";
outfile.close();
exit(0);
}
else
{
if(i<2)
cout <<"密码错误,请重新输入\n";
else
{
cout <<"对不起,密码输入错误超过3次,系统自动退出\n";
exit(0);
}
}
}

}
太乙 2008-10-23
  • 打赏
  • 举报
回复


#include <iostream>
#include <fstream>
using namespace std;
void main()
{
char mima1[10],mima0[10];
for(int i=0;i<3;i++)
{
cout <<"请输入原始密码:";
cin.getline(mima1,7);
ifstream infile("1.txt",ios::in);
if(!infile)
{
cerr <<"无法打开文件!错误!";
exit(1);
}
infile.getline(mima0,7);
infile.close();
if(strcmp(mima0,mima1)==0)
{
cout <<"请输入新密码:\n";
cin.getline(mima0,7);
ofstream outfile("1.txt",ios::out);
if(!outfile)
{
cerr <<"文件无法打开!错误!\n";
exit(1);
}
outfile <<mima0;
cout <<"密码修改成功!\n";
outfile.close();
exit(1);
}
else
if(i<2)
cout <<"密码错误,请重新输入\n";
else
{
cout <<"对不起,密码输入错误超过3次,系统自动退出\n";
exit(1);
}
}

}



没问题啊~!看看lz是不是其他地方错了!
freshairfly 2008-10-23
  • 打赏
  • 举报
回复
void Account::mima()
{
for(i=0;i<3;i++)
{
cout <<"请输入原始密码:";
fflush(stdin); // 加上试试
cin.getline(mima1,7);
ifstream infile("d:\\mima\\1.txt",ios::in);
if(!infile)
{
cerr <<"无法打开文件!错误!";
exit(1);
}
infile.getline(mima0,7);
infile.close();
if(strcmp(mima0,mima1)==0)
{
cout <<"请输入新密码:\n";
fflush(stdin); // 加上试试
cin.getline(mima0,7);
ofstream outfile("d:\\mima\\1.txt",ios::out);
if(!outfile)
{
cerr <<"文件无法打开!错误!\n";
exit(1);
}
outfile <<mima0;
cout <<"密码修改成功!\n";
outfile.close();
exit(1);
}
else
if(i<2)
cout <<"密码错误,请重新输入\n";
else
{
cout <<"对不起,密码输入错误超过3次,系统自动退出\n";
exit(1);
}
}

}
rollrock1987 2008-10-23
  • 打赏
  • 举报
回复
我直接运行你的程序(没有添加类,就里面的这些代码) 不会出现的说的这个问题的

65,211

社区成员

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

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