鱼C论坛

 找回密码
 立即注册
查看: 3342|回复: 5

C++字符串比较问题,急求解惑。。

 关闭 [复制链接]
发表于 2011-6-20 16:15:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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


望大大们不吝解惑。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-6-21 07:19:03 | 显示全部楼层
人工置顶,没有人可以解惑吗。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-21 15:01:13 | 显示全部楼层
if(video.videoTitle==title && !video.delTag)         句不能实现字符串比较
更改为:   if(strcmp(video.videoTitle,title)==0 && !video.delTag){:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-6-21 15:26:02 | 显示全部楼层
:lol  搞定了。。谢谢哈。。。
我也想过这样可能不能比较字符串。但我们教材上却写过类似的代码= =  害人不浅啊啊啊!!!!
十分感谢楼上的伙计哈!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-21 16:19:05 | 显示全部楼层
恭喜冰尘:lol,其实if(video.videoTitle==title && !video.delTag)  这样判断也没有错,只是有个地方你自己忽视了而已:lol还有估计你是在做课程设计吧!大学生忙啊!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-6-21 19:13:31 | 显示全部楼层
哦?能不能请大大祥讲一下哈。。if(video.videoTitle==title && !video.delTag) 怎么得以实现的~?
我下来想了一下,莫非难道也许大概会不会是书上的程序用了运算符重载。但是大概找了一下,好像也没有看到的。。
这个是我们C++期末项目,我才是个大一新生啦。。以后有不懂的还望多多指教哈。。。{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-14 12:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表