|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 冰尘。 于 2011-6-21 15:26 编辑
问题是这样的,各位大大请听我细细道来。。
首先,我是用这个AddData函数把数据写入了文件当中。(打开文件等操作在VideoBook的构造函数中完成了)
- void VideoBook::AddData() //增加数据
- {
- VideoType video; //影片记录
- video.delTag=false; //正常,未作删除标志
- do
- {
- cout<<"输入影片名:";
- cin>>video.videoTitle;
- cout<<"输入影片副本数:";
- cin>>video.numOfCopies;
- file.write((char*)&video,sizeof(VideoType)); //写入文件
- cout<<"继续添加吗";
- } while (UserSaysYes()); //肯定回答时循环
- system("PAUSE");
- }
复制代码
然后,我用如下的SearchData函数欲实现查询功能。
- void VideoBook::SearchData() //查询数据
- {
- VideoType video; //影片记录
- char title[1000]; //片名
- cout<<"输入要查询影碟的片名:";
- cin>>title; //输入片名
- file.seekg(0); //定位
- file.read((char*)&video,sizeof(VideoType)); //读记录
- while (!file.eof())
- { //文件末结束
- if(video.videoTitle==title && !video.delTag) break; //序号相同;记录正常,未作删除标志;查询成功
- file.read((char*)&video,sizeof(VideoType)); //读记录
- }
- if (!file.eof())
- { //查询成功
- cout<<setw(18)<<video.videoTitle<<setw(18)<<video.numOfCopies<<endl; //输出记录
- }
- else
- { //查询失败
- cout<<"无此片名的记录!"<<endl;
- file.clear(); //清除文件结束标志
- }
- system("PAUSE");
- }
复制代码
可是,问题出现了。
查询函数无法完成查询功能,即使输入的片名是添加过的,依然会跳到查询失败的条件分支。
于是我跟踪调试了一番,结果发现在SearchData函数中的while语句前,如果我查询的片名是文件中的第一个,则 video.Title的值和title的值是一样的。但是进入while循环的if条件分支时,还是会直接跳入下次循环,并且最终显示查询失败。也就是说,if(video.videoTitle==title && !video.delTag) break; 这句判断,即使在video.videoTitle和title相等的情况下,还是会被跳过。所以,我认为是不是video.delTag的问题,结果经过跟踪调试,video.delTag读入时,确实也是0值。
于是,我就无解了。。。。
如果我描述的不是很清楚,下面有这个工程的完整代码。希望大大们为我解惑。 谢谢。。。
下面是VideoType结构体的定义:
- struct VideoType
- {
- bool delTag; //删除标志
- char videoTitle[1000]; //片名
- int numOfCopies; //影碟副本数
- };
复制代码
下面是完整工程的下载地址:
http://u.115.com/file/bhaihoa8
望大大们不吝解惑。。 |
|