ifstream读取错误,求解

我文件中有“&”,但是他好像读的有问题,无法进行调试
提取了片段

#include<iostream>
#include<fstream>
#include<cstring>
using namespace std;
int main()
{
  string c;
    ifstream filein("密码.txt",ios::in);
    while(getline(filein,c))
    {
      if(c=="&")
        {
          flag=1;
            continue;
        }
      if(flag==1)
        {
          cout<<c<<endl;
            break;
        }
    }
    return 0;
}

密码.txt中:
&
awdrgy
16827
17234
23424
......
为什么它输出为空白?

4个回答

1.你首先看一下,保存下来的文件是否“密码.txt”,因为在我这里保存下来是乱码的(系统对中文处理的问题),如果确定没问题再往下找问题;
2.我只挑一部分来分析

ofstream file2("密码.txt",ios::app);
file2<<endl<<name;
for(int t=0;t<100;t++)
{
    file2<<endl<<num[0][t];
}
file2<<"&";

这里代码file2<<"&";没有换行再写入,就会出现比如:xxx&这样情况,所以if(c=="&")就会为假;

图片说明

我的建议;
把你的文件备份再修改,将

if(c=="&")改为if(c.find("&") != std::string::npos)

或者将

file2<<"&";改为 file2<<endl<<"&";
perry_lin
perry_lin 不行
4 个月之前 回复
qtchen_1988
qtchen_1988 回复perry_lin: 那你 file2<<"&";改为 file2<<endl<<"&";
4 个月之前 回复
perry_lin
perry_lin 我本来就指定了&为一行的
4 个月之前 回复
qtchen_1988
qtchen_1988 回复perry_lin: 我已经更新回答。你再试试看
4 个月之前 回复
perry_lin
perry_lin 我发一下全部
4 个月之前 回复
perry_lin
perry_lin 能不能简单一点?
4 个月之前 回复

其中这个: if(c=="&"),字符串的对比这样是不得行的哦!应该调用字符串的对比函数来判断,在对字符串对比函数的结果判断才行吧。

我试了一下好像可以输出呀

#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
int main()
{
    string c;
    int    flag = 0;

    ifstream filein("密码.txt", ios::in);
    while (getline(filein, c))
    {
        if (c == "&")
        {
            flag = 1;
            continue;
        }
        if (flag == 1)
        {
            cout << c << endl;
            break;
        }
    }
    return 0;
}

输出是
awdrgy

你看一下你的代码和我的有不同不

这个是提取的片段,要全文吗

#include<iostream>
#include<cstdio>
#include<fstream>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<ctime>
using namespace std;
int main()
{

     for( ; ; )
     {    
         string control="",endif="",c="",swap="",name="",passport="",h="",n="",inspect_type="",test_name="",inspect_name[30],inspect_password[30];
         char l;
         int No=0,flag=0,num[30][100],flag2=0,flag3=0,flag4=0,flag5=0,flag6=0,flag7=0,flag8=0,m=0,o=0,r=0,length_name[30],length_password[30][100],k[30][100][6],num_name,sum[3];
         for(int t=0;t<30;t++)
         {
             for(m=0;m<100;m++)
             {
                 memset(k[t][m],0,sizeof(k[t][m]));
             }
         }
         memset(length_password,0,sizeof(100));
         cout<<"请问要进行什么操作?"<<endl<<"(注册/查看/更新/购买)"<<endl;
         cin>>control;
         if(control=="注册")
         {
             fstream testbycharfile;
             testbycharfile.open("名单2.txt",ios::in);
             while(!testbycharfile.eof())
             {
                 testbycharfile>>l;
                 if(l=='$')
                 {
                     No+=1;
                 }
             }
             for( ; ; )
             {
                 cout<<"请输入昵称"<<endl;
                 cin>>name;
                 ifstream filein8("名单.txt",ios::in);
                 while(filein8>>c)
                 {
                     if(c==name)
                     {
                         flag6=1;
                         break;
                     }
                 }
                 if(flag6==1)
                 {
                     cout<<"昵称已存在!";
                     flag6=0;
                     continue;
                 }
                 cout<<endl<<"请输入密码"<<endl;
                 cin>>passport;
                 for(int t_1=0;t_1<10;t_1++)
                 {
                     for(int t_2=0;t_2<10;t_2++)
                     {
                         for(int t_3=0;t_3<t_1;t_3++)
                         {
                             test_name+=t_2+'0';
                             if(passport==(name+test_name))
                             {
                                 cout<<"密码过于简单!";
                                 flag6=1;
                                 break;
                             }
                             if(passport==test_name)
                             {
                                 cout<<"密码过于简单!";
                                 flag6=1;
                                 break;
                             }
                         }
                         if(flag6==1)
                         {
                             break;
                         }
                         test_name="";
                     }
                     if(flag6==1)
                     {
                        break;
                     }
                 }
                 if(flag6==1)
                 {
                     flag6=0;
                     continue;
                 }
                 cout<<endl;
                 cout<<"请确认信息" <<endl<<"昵称:"<<name<<endl<<"编号:"<<No<<endl<<"密码:"<<passport<<"(输入是或否)"<<endl;
                 cin>>h;
                 if(h=="是")
                 {
                     break;
                 } 
                 else if(h=="否")
                 {

                 } 
                 else
                 {
                     cout<<"已默认为“否”";

                 }
             }
             testbycharfile.open("名单.txt",ios::in);
             ofstream fileOut("名单2.txt",ios::app);
             while(!testbycharfile.eof())
             {
                 testbycharfile>>c;
                 fileOut<<c;
             }
             fileOut<<No<<"#"<<name<<"#"<<passport<<"$";
             ofstream fileio2("名单.txt",ios::app);
             fileio2<<endl<<No<<endl<<name<<endl<<passport<<endl<<"&";
             srand((unsigned)time(NULL));
             for(int i=0;i<100;i++)
                 {
                     num[0][i]=rand()%999999;
                 }           
             ofstream file2("密码.txt",ios::app);
             file2<<endl<<name;
             for(int t=0;t<100;t++)
             {
                file2<<endl<<num[0][t];
             }
             file2<<"&";
         }
         else if(control=="查看")
         {
             cout<<"请输入查看类型(个人/查看码)"<<endl;
             cin>>inspect_type;
             if(inspect_type=="个人")
             {
                 cout<<"请输入你要查看的名字"<<endl;
                 cin>>name;
                 ifstream filein("名单.txt",ios::in);
                 flag=0;
                 while(filein>>c)
                 {
                     if(c=="&")
                     {
                         ++flag;
                     }
                     if(c==name)
                     {               
                         ifstream filein3("名单.txt",ios::in);
                         while(filein3>>c)
                         {
                             if(flag==0)
                             {
                                 cout<<"编号:"<<c<<endl;
                                 flag3=1;
                                 flag++;
                             }
                             if(flag2==1)
                             {
                                 cout<<"昵称:"<<c<<endl;
                             }
                             if(flag2==2)
                             {
                                 cout<<"密码:"<<c<<endl;
                             }
                             if(flag3==1)
                             {
                                 flag2++;
                                 if(c=="&")
                                 {
                                     break;
                                 }
                             }
                             if(c=="&")
                             {
                                 flag-=1;
                             }
                         }
                         flag=1;
                         break;
                     }
                 }
                 if(flag==1)
                 {
                     ifstream filein2("密码.txt",ios::in);
                     cout<<"查看码:";
                     flag4=0;
                     flag3=0;
                     while(filein2>>c)
                     {
                         if(c=="&")
                         {
                            flag3++;
                         }
                         if(c==name)
                         {
                             ifstream filein4("密码.txt",ios::in);
                             while(filein4>>c)
                             { 
                                 if(flag3==0&&flag4==0)
                                 {
                                     flag4++;
                                     continue;
                                 }
                                 if(c=="&")
                                 {
                                     flag3--;
                                 }
                                 if(flag4==1)
                                 {
                                     if(c=="&")
                                     {
                                         break;
                                     }
                                     cout<<endl<<c;
                                 }
                             }
                             cout<<endl;
                         } 
                     }
                 }
                 else
                 {
                     cout<<"用户不存在!";
                 }
             } 
             else if(inspect_type=="查看码")
             {
                 cout<<"请输入集数";
                 cin>>No;

                 ifstream filein5("密码.txt",ios::in);
                 flag=0;
                 while(filein5>>c)
                 {
                     if(No>100)
                     {
                         cout<<"集数不存在!";
                         break;
                     } 
                     if(c=="&")
                     {
                         flag=-2;
                     }
                     flag+=1;
                     if(flag==0)
                     {
                        cout<<c<<endl;
                     }
                     if(flag==No)
                     {
                         cout<<"  "<<c<<endl;
                     }

                 }
             } 
         }
         else if(control=="更新")
         {
             ifstream filein6("密码.txt",ios::in);
             flag5=-1;
             flag4=0;
             flag3=0;
             flag=0;
             flag2=0;
             while(filein6>>c)
             {
                 if(c=="&")
                 {
                     flag5++;
                     flag=1;
                     flag2++;
                     continue;
                 }
                 if(flag==2)
                 {
                    length_password[flag5][flag3]=c.size();
                    flag3++;
                 }
                 if(flag==1)
                 {
                    length_name[flag4]=c.size();
                    inspect_name[flag4]=c;
                    flag4++;
                    flag=2;
                 }
             }
             num_name=flag4;
             flag=0;
             m=0;
             o=0;
             flag3=0;
             flag4=-1;
             flag5=-1;
             fstream testbycharfile;
             testbycharfile.open("密码.txt",ios::in);
             while(testbycharfile>>l)
             {
                 if(l=='&')
                 {
                     flag=0;
                 }
                 if(flag==1)
                 {
                     if(length_name[flag4]>0)
                     {
                         length_name[flag4]-=1;
                         continue;
                     }
                     o=length_password[flag5][flag3];
                     if(m==0)
                     {
                        --o;
                     }
                     k[flag5][m][o]=l-'0';
                     if(o==0)
                     {
                        flag3+=1;
                        m++;
                     }
                     length_password[flag5][flag3]-=1;
                 }
                 if(l=='&')
                 {
                     flag5++;
                     flag2-=1;
                     flag4++;
                     flag=1;
                     m=0;
                 }
             }
             ifstream filein10("名单.txt",ios::in);
             while(filein10>>c)
             {
                 if(flag7==3)
                 {
                     inspect_password[r]=c;
                     flag7=0;
                     r++;
                 }
                 if(flag7==2)
                 {
                    flag7++; 
                 }
                 if(flag7==1)
                 {
                     flag7++;
                 }
                 if(c=="&")
                 {
                     flag7=1;
                 }
             }
             for(int t=0;t<100;t++)
             {
                num[0][t]=k[0][t][5]*100000+k[0][t][4]*10000+k[0][t][3]*1000+k[0][t][2]*100+k[0][t][1]*10+k[0][t][0];
             }
             ofstream fileout7("我的我的世界Bug日记4.2.0.cpp",ios::out);
             fileout7<<"#include<iostream>\n#include<fstream>\n#include<cstring>\nusing namespace std;\nint main()\n{\n     int b,flag;\n    string name,password;\n    char a;\n    cout<<\"请输入昵称\";\n    cin>>name;\n    cout<<\"请输入密码\";\n    cin>>password;\n    if(name==\""<<inspect_name[0]<<"\")\n    {\n      if(password==\""<<inspect_password[0]<<"\")\n      {\n        cout<<\"请问你要看哪一期?\";\n      cin>>a;\n      cout<<\"请输入查看码\";\n      cin>>b;\n      switch(a)\n      {\n"; 
             for(int t=0;t<100;t++)
             {
                fileout7<<"      case'"<<t+1<<"':\n        if(b=="<<num[0][t]<<")\n        {\n          flag=1;\n        }\n        else\n        {\n          flag=2;\n        }\n        break;\n";
             } 
             fileout7<<"      }\n    if(flag==1)\n    {\n    switch(a)\n      {\n        case'1':\n          {\n          ofstream fileOut(\"我的世界Bug日记第1期.txt\",ios::out);\n          fileOut<<\"Bug出生在一个荒岛上,\"<<endl<<\"他不是新手,所以知道要砍树。\"<<endl<<\"他看了看四周,发现没有树,于是他往前走\"<<endl<<\"走着走着,他瞬移了,卡到一棵树里\"<<endl<<\"卡死了。\"<<endl<<\"第一期结束\";\n          break;\n        }\n        case'2':\n        {\n          fstream fileOut2(\"我的世界Bug日记第二期.txt\",ios::out);\n          fileOut2<<\"Bug重生了,但他却不在那个岛上\"<<endl<<\"他在山洞里,发现一个宝箱,里面有本书\"<<endl<<\"他打开一看,里面写着:重生点更改 100%\"<<endl<<\"瞬移 25%\"<<endl<<\"后面都是空的,他想:这难道是我卡Bug的几率?\"<<endl<<\"他突然被小白围攻,他搭起了一堵墙,结果还是死了。\"<<endl<<\"书上默默地多了一条:\"<<endl<<\"弓箭穿墙 30%\"<<endl<<\"第二期结束\";\n        }\n        default:cout<<\"尚未开发\";\n      }\n    }\n  }\n  }\n  else if(flag==2)\n    {\n      cout<<\"密码错误!\";\n     }\n"; 

             ofstream fileout8("我的我的世界Bug日记4.2.0.cpp",ios::app);
             for(int i=1;i<num_name;i++)
             {
                 for(int t=0;t<100;t++)
                 {
                     num[i][t]=k[i][t][5]*100000+k[i][t][4]*10000+k[i][t][3]*1000+k[i][t][2]*100+k[i][t][1]*10+k[i][t][0];
                 }
                 fileout8<<"else if(name==\""<<inspect_name[i]<<"\")\n    {\n      if(password==\""<<inspect_password[i]<<"\")\n     {\n      cout<<\"请问要看哪一期?\";\n      cin>>a;\n      cout<<\"请输入查看码\";\n      cin>>b;\n      switch(a)\n      {\n";
                 for(int t=0;t<100;t++)
                 {
                    fileout8<<"      case'"<<t+1<<"':\n        if(b=="<<num[i][t]<<")\n        {\n          flag=1;\n        }\n        else\n        {\n          flag=2;\n        }\n        break;\n";
                 } 
                 fileout8<<"      }\n    if(flag==1)\n    {\n      switch(a)\n      {\n        case'1':\n          {\n          ofstream fileOut(\"我的世界Bug日记第1期.txt\",ios::out);\n          fileOut<<\"Bug出生在一个荒岛上,\"<<endl<<\"他不是新手,所以知道要砍树。\"<<endl<<\"他看了看四周,发现没有树,于是他往前走\"<<endl<<\"走着走着,他瞬移了,卡到一棵树里\"<<endl<<\"卡死了。\"<<endl<<\"第一期结束\";\n          break;\n        }\n        case'2':\n        {\n          fstream fileOut2(\"我的世界Bug日记第二期.txt\",ios::out);\n          fileOut2<<\"Bug重生了,但他却不在那个岛上\"<<endl<<\"他在山洞里,发现一个宝箱,里面有本书\"<<endl<<\"他打开一看,里面写着:重生点更改 100%\"<<endl<<\"瞬移 25%\"<<endl<<\"后面都是空的,他想:这难道是我卡Bug的几率?\"<<endl<<\"他突然被小白围攻,他搭起了一堵墙,结果还是死了。\"<<endl<<\"书上默默地多了一条:\"<<endl<<\"弓箭穿墙 30%\"<<endl<<\"第二期结束\";\n        }\n        default:cout<<\"尚未开发\";\n      }\n    }\n  }\n  }\n  else if(flag==2)\n    {\n      cout<<\"密码错误!\";\n     }\n"; 
             }
             fileout8<<"  return 0;\n}";
         }
         else if(control=="购买")
         {
             cout<<"请输入昵称"<<endl;
             cin>>name;
             cout<<"请输入集数(n~m)"<<endl;
             cin>>num[0][0]>>l>>num[0][1];
             if(l!='~')
             {
                 flag==5;
             }
             if(num[0][0]>num[0][1])
             {
                 num[0][2]=num[0][0];
                 num[0][0]=num[0][1];
                 num[0][1]=num[0][2];
             }
             ifstream filein11("密码.txt");
             while(getline(filein11,n))
             {
                 if(n=="&")//在这里出错
                 {
                     flag=1;
                     continue;
                 }
                 if(flag==1)
                 {
                     flag=2;
                     continue;
                 }
                 if(flag==2)
                 {
                     if(name==n)
                     {
                         flag2=1;
                         for(int t=1;t<num[0][0];t++)
                         {
                             filein11>>n;
                             if(c=="&")
                             {
                                 flag5=1;
                                 break;
                             }
                         }
                         if(flag5==1)
                         {
                             break;
                         }
                         cout<<"查看码为:"<<endl;
                         for(int t=1;t<num[0][1]-num[0][0]+1;t++)
                         {
                             filein11>>n;
                             cout<<"  "<<n<<endl;
                         }
                         break;
                     }
                     flag=0;
                 }
             }
             sum[0]=num[0][1]-num[0][0]+1;
             sum[1]=sum[0]/5;
             if(sum[1]*5!=sum[0])
             {
                 sum[2]=5-(sum[0]-sum[1]*5);
                 sum[1]++;
             }
             else
             {
                 sum[2]=0;
             }
             cout<<"总价="<<sum[1]<<"-"<<sum[2]<<endl;
             if(flag5==1)
             {
                 cout<<"集数不存在!";
             }
        }

         cout<<"是否继续?"<<endl;
         cin>>endif;
         if(endif=="否")
         {
             break; 
         } 
     } 
     return 0; 
}

密码.txt:
&
awdrgy
12762
12237
37929
49373
92374
......
我自己玩着玩着解决了,谢谢各位

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!