标题:关于文件流的操作
只看楼主
教皇
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2011-10-6
结帖率:95.65%
已结贴  问题点数:30 回复次数:18 
关于文件流的操作
请大家仔细看一下下面的文件。这是我在课程设计中需要增加一个密码的功能。
当第一次打开程序时,系统要求注册账号和密码,注册完后,马上显示输入账号和密码。
但结果却是系统不断重复提示这是第一次使用该程序,请注册账号和密码。
但是当第一次输入国账号和密码后,其实密码文件就已经生成了。如果直接把程序关了,再重新开这个课执行行文件
程序就可以显示“请输入账号和密码了”!!!!
十万火急啊!!!!!!!!!!!!!!!!!!!!!!
#include<iostream.h>
#include<fstream.h>
#include<string.h>
#include<iomanip.h>
 int pin()
{

 int t;
 char pwd[11];
 char num[11];
 cout<<"欢迎进入通讯录管理系统"<<endl;
 fstream file1,file2;
 cout<<"1->用户登陆"<<endl;
 cout<<"2->退出程序"<<endl;
 cin>>t;
 while(t!=1&&t!=2)
 {
  cout<<"指令错误,请重新输入"<<endl;
  cin>>t;
 }
 
 while(t==1)
 {
  file1.open("password.dat",ios::in|ios::nocreate|ios::binary);
  if(!file1)
  {
   cout<<"您是第一次使用该系统,请输入用户名和密码"<<endl;
   cout<<"用户名和密码均不超过10个字母(数字)"<<endl;
   cout<<"用户名:";
   cin>>pwd;
  
   cout<<"密码:";
   cin>>num;
   file2.open("password.dat",ios::out|ios::binary);
   file2.write((char*)pwd,11);
   file2.write((char*)num,11);
   file2.close();
   cout<<"密码文件已经创建"<<endl;
  }
  else
  {
   char temp1[11],temp2[11];

   cout<<"提示:用户名和密码均不超过10个字母(数字)"<<endl;
   cout<<"用户名:";
   cin>>pwd;
   cout<<"密码:";
   cin>>num;
   while(file1.peek()!=EOF)
   {
    file1.read((char*)temp1,11);
    file1.read((char*)temp2,11);
   }
   file1.close();
  
   if(strcmp(temp1,pwd)==0&&strcmp(temp2,num)==0)
        return 1;
   else
   {
     cout<<"您输入的用户名或密码有问题"<<endl;
     cout<<"是否重新输入,进入该系统"<<endl;
     cout<<"1.是"<<setw(10)<<"2.否"<<endl;
     cin>>t;
     while(t!=1&&t!=2)
     {
       cout<<"指令错误,请重新输入"<<endl;
       cin>>t;
     }
     if(t==2)
      return 0;
   }
  
 
  }
 
 }
 return 0;
}
void main()
{
 cout<<pin();

}
搜索更多相关主题的帖子: 密码 注册账号 include 课程 
2012-05-13 22:06
教皇
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2011-10-6
得分:0 
在线等啊!!!!!!!!!!!!!!!摆脱啊!!!!!!!!!!!!!!!!!!
2012-05-13 22:12
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:30 
启动程序之后,你用file1句柄打开文件password.dat,用句柄等于零来判断文件不存在。现在假设刚开始文件是不存在的,程序进入只一次创建密码文件的if()流程,此时你并没有关闭file1句柄,就用file2句柄打开同一个文件,把密码写在file2句柄之中,储存起来,然后返回while()循环检查file1,此时file1仍然是原先的值,等于零,于是反复地要求你创建密码文件。但当你关闭程序,file1也关闭了,重新打开,此时file1.open()发现password.dat文件已经存在(nocreate),于是file1!=0,程序能够进入后面的流程。

授人以渔,不授人以鱼。
2012-05-13 23:22
教皇
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2011-10-6
得分:0 
回复 3楼 TonyDeng
那应该怎么修改啊大神
2012-05-13 23:24
教皇
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2011-10-6
得分:0 
回复 3楼 TonyDeng
可是file1的文件如根本没打开的话为什么还需要关闭呢?

[ 本帖最后由 教皇 于 2012-5-13 23:29 编辑 ]
2012-05-13 23:27
教皇
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2011-10-6
得分:0 
回复 3楼 TonyDeng
大神,按你的意思我在那个file1句柄后加入一个file1.close();可还是没有效果啊
2012-05-13 23:31
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
不需要用两个文件句柄的,把你前面的代码改为下面的形式:

程序代码:
success=file.open();     // 测试文件是否可以打开,记忆测试结果
fclose(file);            // 测试完毕,马上关闭
if (!success)            // 根据测试结果进行动作
{
}


授人以渔,不授人以鱼。
2012-05-13 23:36
教皇
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2011-10-6
得分:0 
回复 7楼 TonyDeng
可是我觉得我这样的写法应该也没有错的啊,我在程序中加入close()函数,照理不是应该把file1给关了吗,那为什么下一次循环任然读不出文件呢
2012-05-13 23:40
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
关闭文件,并不会改变句柄的值,只有重新打开,句柄才会改变。

授人以渔,不授人以鱼。
2012-05-13 23:42
教皇
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2011-10-6
得分:0 
明白了。谢谢
2012-05-13 23:43



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-367468-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017248 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved