C++循环问题

没有分了,但还有点疑问,希望您能帮忙,按照您的意思b[j]='\0'也应该属于for的循环体加上if不用大括号吗?还有就是如何不满足for循环条件,应该执行for以后的语... 没有分了,但还有点疑问,希望您能帮忙,按照您的意思 b[j]='\0'也应该属于for的循环体加上if不用大括号吗?还有就是如何不满足for循环条件,应该执行for以后的语句,那么假如说for循环条件变为b[i]!=c,那么对于am来说a不符合循环,执行for以后的语句,则m如何办,循环已经结束了吗? 展开
 我来答
sunnyapi
2011-07-10 · TA获得超过1032个赞
知道小有建树答主
回答量:376
采纳率:100%
帮助的人:368万
展开全部
楼主您好,没有分数不要紧,我们是交流C,分数都是浮云哦,贵在共同进步~~呵呵 很高兴和您交流,回答如下:
问题1:可能之前的回答不到位,让您造成了这个小细节上的误会。 b[j]='\0'不属于for循环体的一部分。这个时候for循环已经结束,所以这时候的j已经经历了12次自加,从0已经变成了12,(关于这个您可以在后面我附上的程序里看明白),所以这句话是说b[12]='\0'.这是说我们已经得到了去掉字符串中所有的字符a之后的字符串b了,在完成所有工作之后最末尾部加上结束标志'\0'.
问题2:
楼主的问题透漏出又有一个细节我解释不到位,让楼主没有搞清楚。
“对于am来说a不符合循环”,这句话不对,对于am来说a是符合循环条件的。因为a前面是个空格,空格在ascII码制表里面的ASCII值是032,转义表示是\0x20,而'\0'对应的ascII码是0,表示的是NULL,就是什么都没有,表示四大皆空。换言之,在屏幕上你打印一个printf("\0x20")会输出一个空格,你的光标位置就会右移一位,但是你用printf("\0");会发现光标位置也没变,什么现象都没有,对吧?
附代码:
/***************************************************/
for(i=0,j=0;b[i]!='\0';i++)
if(b[i]!=c)
{
b[j]=b[i];
j++;
//cout<<"dsa\n";
}
b[j]='\0';
}
/*****************************************/
上述代码等价于:
/*************************************/
for(i=0,j=0;b[i]!='\0';i++)
{ //for的作用范围
if(b[i]!=c)
{
b[j]=b[i];
j++;
//cout<<"dsa\n";
}
} //for的作用范围
b[j]='\0';
}
/***********************************************/
楼主为了验证上述观点,可以在 j++;之后加上一句cout<<"dsa\n";
这样运行发现输出了12行的字符dsa对吧?这就说明这句话在for的作用范围之内对吧?
希望楼主有所收获,一起进步哦

参考资料: II

来自:求助得到的回答
h714960997
2011-07-09 · TA获得超过113个赞
知道小有建树答主
回答量:240
采纳率:0%
帮助的人:149万
展开全部
if 是限制的条件句子 for也是 都是有穷的 所以一般for才定义 三个条件
if用中括号是有&&和||的原因 for中是;这个 准确的说是你记住就行了!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式