LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 800|回复: 7

为什么会打印三次

[复制链接]
发表于 2004-1-23 14:22:04 | 显示全部楼层 |阅读模式
#include <stdio.h>
#define PR(ar) printf("ar=%d",ar)
void main ()
{
int j,a[]={1,3,5,7,9,11,13,15},*p=a+5;
for (j=3;j;j--)
switch(j)
{
case 1:
case 2: PR(*p++);break;
case 3: PR(*(--p));
}
}

不知道为什么会打印三次,这里只有两各PR,??
发表于 2004-1-23 14:31:43 | 显示全部楼层
for (j=3;j;j--)
 楼主| 发表于 2004-1-23 14:33:25 | 显示全部楼层
最初由 _z_ 发表
for (j=3;j;j--)


不是,当j==1时,没有要打印丫??
发表于 2004-1-23 15:20:55 | 显示全部楼层
这是switch语句要注意的地方,每个case后面要有break语句,否则会继续执行下面的语句,除非是最后一个case
所以这里你要想正确实现你的程序,switch语句就要改成下面的样子
switch(j)
{
&nbsp;&nbsp;&nbsp;&nbsp;case 1: break;
&nbsp;&nbsp;&nbsp;&nbsp;case 2: PR(*p++);break;
&nbsp;&nbsp;&nbsp;&nbsp;case 3: PR(*(--p));
}
发表于 2004-1-25 15:56:46 | 显示全部楼层
把打印的结果贴出来看看吧!
发表于 2004-1-28 13:32:50 | 显示全部楼层
问题出在这
switch(j)
{
case 1: (少了)break;
case 2: PR(*p++);break;
case 3: PR(*(--p));
}
 楼主| 发表于 2004-1-28 15:21:04 | 显示全部楼层
最初由 koala114 发表
问题出在这
switch(j)
{
case 1: (少了)break;
case 2: PR(*p++);break;
case 3: PR(*(--p));
}


谢谢!!但我还是不明白,break能控制打印的操作,(我知道bread的意思)。
发表于 2004-1-28 16:09:25 | 显示全部楼层
因为当j=1是,执行case 1:
执行完后,由于你没加break,所以它就接下去执行case 2:
如果你把case 2: PR(*p++);break;改成case 2: PR(*p++);
那程序就会接下去执行case 3,这样就变成4次了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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