c++程序,代码用visual c++编译过了,没有错误,但为什么运行出来只有文件打开失败几个字?求大佬帮忙看看问题所在,帮忙修改一下,谢谢,谢谢,急 源代码: #include #include #include #include using namespace std;#define Maxsize 57struct record{char name[20];char tel[20];char add[20];};typedef record *precord;struct HashTable{ int elem[Maxsize]; //存放数组a[]的下标int count;};typedef HashTable * pHashTable;int Number; //统计当前数组a[]中的记录总数void Getdata(precord a) //从文件telphone.txt中读取数据存放到数组a[]{ Number=0;ifstream infile("telphone.txt",ios::in|ios::binary);if(!infile) {cout<<"文件打开失败!\n"; exit(1);}while(!infile.eof() && infile.get()!=EOF) //文件不为空并且文件指针没有指到结束符{infile.seekg(Number*sizeof(a[Number]),ios::beg); //定位文件指针infile.read((char*)&a[Number],sizeof(a[Number]));Number++;}infile.close();}void Add(precord a) //添加记录{ int i,num;cout<<"当前文件内已有"<>num;ofstream ofile("telphone.txt",ios::app);if(!ofile) {cout<<"文件打开失败!"; exit(1);}for(i=0;i>a[Number].name;cout<<"请输入第"<>a[Number].tel;cout<<"请输入第"<>a[Number].add;ofile.seekp(ios::end);ofile.write((char*)&a[Number],sizeof(a[Number]));Number++;}ofile.close();}void Print(precord a) //显示所有记录{int i;for(i=0;ielem[i]=-1;}int menu;void Creathash_Name(pHashTable h,precord a)//以员工姓名为关键字创建哈希表{cout<<" ----------------------------------------------------------------------\n";cout<<" 1----以线性探测建表\n";cout<<" 2----以平方探测建表\n";cout<<" ----------------------------------------------------------------------\n";int i,address;cout<<"请选择:";cin>>menu;Init_Hash(h);for(i=0;ielem[address]!=-1){if(menu==1) address=Line_Sollution(address);else address=Square_Sollution(address);if(address==-1) break;}if(address!=-1) { h->elem[address]=i; h->count++;}}cout<<"姓名哈希表已成功建立!\n";}void Search_Name(pHashTable h,precord a) //查找并显示指定姓名的记录{ cout<<"请输入要查找的姓名:";char nam[20];int address,i=1;cin>>nam;address=Hash(nam);derter=0;n=-1;while(h->elem[address]!=-1 && strcmp(nam,a[h->elem[address]].name)!=0){ if(menu==1) address=Line_Sollution(address);else address=Square_Sollution(address);i++;if(address==-1) break;}if(h->elem[address]!=-1&&strcmp(nam,a[h->elem[address]].name)==0){ cout<<"你要查找的信息为:\n";cout<<"姓名:"<elem[address]].name<elem[address]].tel<elem[address]].add<>menu;Init_Hash(h);for(i=0;ielem[address]!=-1){if(menu==1) address=Line_Sollution(address);else address=Square_Sollution(address);if(address==-1) break;}if(address!=-1) { h->elem[address]=i; h->count++;}}cout<<"电话哈希表已成功建立!\n";}void Search_tel(pHashTable h,precord a)//查找并显示指定电话号的记录{ cout<<"请输入要查找的电话:";char telphone[20];int address,i=1; //i统计比较次数cin>>telphone;address=Hash(telphone);derter=0; n=-1; //初始化线性增量while(h->elem[address]!=-1&&strcmp(telphone,a[h->elem[address]].tel)!=0){if(menu==1) address=Line_Sollution(address);else address=Square_Sollution(address);i++;if(address==-1) break;}if(h->elem[address]!=-1 &&strcmp(telphone,a[h->elem[address]].tel)==0){ cout<<"你要査找的信息为:\n";cout<<"姓名:"<elem[address]].name<elem[address]].tel<elem[address]].add<>m;if(m==1){cout<<"请输入要删除的电话:";char telphone[20];int address,i,j;cin>>telphone;address=Hash(telphone);derter=0; n=-1; //初始化线性增量while(h->elem[address]!=-1&&strcmp(telphone,a[h->elem[address]].tel)!=0){ if(menu==1) address=Line_Sollution(address);else address=Square_Sollution(address);if(address==-1) break;}if(h->elem[address]!=-1 &&strcmp(telphone,a[h->elem[address]].tel)==0){j=h->elem[address];h->elem[address]=-1;}for(i=j;i>nam;address=Hash(nam);derter=0;n=-1;while(h->elem[address]!=-1&&strcmp(nam,a[h->elem[address]].name)!=0){if(menu==1) address=Line_Sollution(address);else address=Square_Sollution(address);i++;if(address==-1) break;}if(h->elem[address]!=-1 &&strcmp(nam,a[h->elem[address]].name)==0){j=h->elem[address];h->elem[address]=-1;}for(i=j;i>menu1;switch(menu1){ case 0:system("cls");exit();break;case 1:Add(a);system("pause");system("cls");goto start;break;case 2:Print(a);system("pause");system("cls");goto start;break;case 3:Creathash_Name(H,a);system("pause");system("cls");goto start;break;case 4:Creathash_tel(H,a);system("pause");system("cls");goto start;break;case 5:Search_Name(H,a);system("pause");system("cls");goto start;break;case 6:Search_tel(H,a);system("pause");system("cls");goto start;break;case 7:Delet(H,a);system("pause");system("cls");goto start;break;default:cout<<"请输入正确的操作选项!\n";system("cls");goto start;break;}return 0;}
ifstream infile("telphone.txt",ios::in|ios::binary);
if(!infile) 你这个判断的写法就不对,infile一直是个非零值,!infile永远为false,你应该用infile.good()去判断.
写文件同理
上面的回答错了,大概率是你的文件放的位置不对,你如果是直接用vs运行的话,相对路径是在工程目录下,
如果你直接运行的程序,相对路径就是你运行程序的文件夹下.