问:C primer plus 5th(chapter13,Review Question 5),该怎么解决

问:C primer plus 5th(chapter13,Review Question 5)
我的函数:
bool   has_ch(char   ch,   const   char   *line)
{
            while(*line++)
                      if(ch==*line)       return   true;
            return   false;
}

答案:
bool   has_ch(char   ch,   const   char   *line)
{
            while(*line)
                      if(ch==*line++)       return   true;
            return   false;
}
上述程序中,只是while循环退出条件在不同位置而已,我发现并没有什么不同。但实际运行时却发现我的程序不能识别出 '# ',从而不打印含有 '# '的行。
请高手解答,谢谢!

------解决方案--------------------
while(*line++)
if(ch==*line) return true;
return false;


==>

bool has_ch(char ch, const char *line)
{
while(*line)
{
line=line+1
if(ch==*line) return true;
}
return false;
}

你把第一个字母给丢掉了


------解决方案--------------------
bool has_ch(char ch, const char *line)
{
while(*line++) // 当*line不为0时,line++使line指向下一个字符了
if(ch==*line) return true;
return false;
}
------解决方案--------------------
注意++

如*line++的意思是先使用 *line
然后把line指针往后移一位

这样你判断的line和你后面操作的line相差一个

标准答案中没有这一问题

------解决方案--------------------
呵呵,就像楼上说的,你把第一个字母给丢了,
两个程序怎么会一样呢?呵呵,答案给的程序对*line 和ch 比较后才移到下一个判断,你没有判断你没有和ch比较就把他移到第二个字符了啊