马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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
望大大们不吝解惑。。 |