循环和continue,break的那点事

惭愧一直对这部分不是特别的明确,总是跟着感觉写,并且我的程序中也很少出现continue和break,不过这次写网络程序会用到不少这些语句,所以为了程序的健壮性,只能深入的理解这部分的内容了,总是以为简单就一闪过去的态度还是要不得啊....

网上几个continue和break的例子让人看了比较蛋疼,根本不是说这几个语句的,中间还加有别的逻辑,搞的人很晕,自己写程序测试下就知道了:

1.continue

continue的作用是:循环体剩余的语句不再执行,直接跳转到判断循环的地方.

在VC 6.0下输入如下的语句,从打印可以判断这点

#include 
#include 
#include 

int main(int argc, char *argv[])
{
	int i = 1;
//recv:
	while (1)
	{
		Sleep(1000);
		printf("11111/n");

		while (1)
		{
			printf("22222/n");		
			Sleep(2000);
			
			if (i > 0)
			{
				printf("33333/n");
				if (i == 1)
				{
					continue;
					//goto recv;
					//break;
				}
			}
		}
		printf("44444/n");
	}

	return 0;
}	


输出是什么呢?

11111
22222
33333
22222
33333
......
也就是说会在第二个while(1)里面一直循环.那么continue就完成了自己的作用,continue后面的语句不再执行(这里没有出现44444的打印),而跳转到while(1)的地方.
有人会不会有疑问说是不是跳转到if(i > 0)这里?之前continue的作用说的很明确了,是跳转到判断循环的地方.
那么什么是循环?C的循环只有3种:for,while,do-while.除此之外再无他了.(其实我写例子就是判断这点,比较汗,看书不仔细).
2.goto
还是前面的例子,如果我想从原来continue的地方从第一个while(1)开始运行的话,有什么办法呢?
答案就是goto,这就是goto灵活的地方.对goto使用原则就不再多说了,不可多用不可不用.
这个时候的打印就是
11111
22222
33333
11111
22222
33333
......
在socket编程的注册函数中,可以经常看到这样的写法(我用伪代码写下):
int Register_Func()
{
Create:
if(创建socket失败){goto Create;}
Connect:
if(连接服务器失败){goto Connect;}
Select:
if(服务器读状态失败){goto Select;}
Send:
if(向服务器读发送数据失败){goto Send;}
.......//之后可以recv
}

也就说说goto可以使语句跳转到标签处,而不受其它的限制.
3.break
break的作用是:终止本次循环,直接运行循环之后的代码.
还是上面的例子,如果改为break的话,那么打印就是:
11111
22222
33333
44444
11111
22222
33333
44444
......
也就是说break跳出了第二个while(1),运行了第二个while(1)后面的打印44444的语句后,才回到第一个while(1)(如果这里不是while(1)的话就继续向下运行了).
4.总结
现在就非常明确了,continue是对循环判断条件的立即跳转,break是终结此次循环运行后面的语句,goto是想去哪里就去哪里.
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魔尊moon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值