读书人

问:C primer plus 5th(chapter13,Rev

发布时间: 2012-02-28 13:06:36 作者: rapoo

问: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比较就把他移到第二个字符了啊

读书人网 >C语言

热点推荐