除了分支语句和循环语句,还有一类语句也能改变程序的执行顺序,它就是跳转语句。
常见的跳转语句有四种:
- break 语句
- continue 语句
- return 语句
- goto 语句
分别介绍一下它们吧:
1)break语句
一般 break 语句使用在循环语句和switch语句中,break 翻译过来就是打破,在循环中可以理解为打破循环,用于结束循环和switch。
举个例子:
for(int i=0;i<10;i++)
{
if(i == 5)
{
break;
}
printf("%d",i);
}
执行结果:01234
这是一个简单的循环,忽略break语句的话,它应该输出的是0123456789。但是当 i 等于5时,执行break语句。 break 语句打破了循环,直接退出了循环。
2) continue 语句
一般continue 语句多用于循环语句中,continue 翻译过来就是继续,用于结束本次循环但还要继续循环,下一次循环还是会判断循环条件。
举个例子:
for(int i=0;i<10;i++)
{
if(i == 5)
{
continue;
}
printf("%d",i);
}
执行结果:012346789
忽略break语句的话,它应该输出的是0123456789。加上 continue 语句后少了一个输出 5。当 i 等于 5 时,执行continue语句,跳出本次循环,在循环结束后 i++,i 的值变为 6 ,i 满足小于10的条件,继续循环。
关于 continue 语句,昨天还遇到一个坑:
int i = 0;
while(i<10)
{
if(i == 5)
{
continue;
}
printf("%d",i);
i++;
}
执行结果:01234[…] (不输出任何信息,但是程序还没结束)
很多人可能会以为这个代码和上面那个代码的执行结果相同,但事实上这个代码是一个死循环。当满足 i 等于 5 的时候,直接跳出本次循环,但是循环变量 i 的值并没有发生改变,也就是说下一次进入循环是的 i 的值依旧是 5 ,下下次也是如此,进入了一个死循环。
注意:因此使用 continue 语句时要注意循环变量的变化。
3) return 语句
return 语句多用于函数的结束, 会返回一个数据给函数的调用者,并立即结束函数的执行。由于 return 语句可以从一个函数跳转另一个函数中,因此也算到跳转语句中。
举个例子:
int main()
{
int i = 0;
printf("1");
if(i == 0)
{
return 0;
}
printf("2");
return 0;
}
输出结果为 1
因为 if 满足条件直接执行return语句,返回了一个 0 给调用者,并且结束了main函数,后面的 2 就打印不出来了。
注意:return 后面跟着的返回值类型是由函数的返回值类型决定的,比如这里 return 0,0是一个整数,因为int main 定义了返回值为 int 类型。
4)goto语句
goto 语句可以在函数内任意跳转,只能是函数内,不能跳转到其他函数中。
使用方式
标签名:
…
goto 标签名;
举个例子:
int main()
{
printf("1");
loop1:
printf("2");
goto loop1;
printf("3");
}
执行结果是:122222222222…(一直是2)
在第一个 printf() 后面定义一个标签 loop1 ,在第二个 printf() 后面执行了 goto 语句,跳转到 loop1 标签处继续向下运行,打印 2 后继续执行 goto 语句 跳转到 loop1,相当于一个死循环。
既然 goto 语句可以实现死循环的功能,那么改变跳转的条件就可以变成一个循环使用。
举个例子:
int main()
{
int i=0;
loop1:
printf("%d",i);
i++;
if(i<10)
{
goto loop1;
}
}
执行结果是:123456789
当满足 if 条件中 i 小于10时,goto语句跳转到 loop1处,执行 10 次 。
通过goto语句可以解决一些奇奇怪怪的题目,比如:不使用循环语句计算N的阶乘
#include<stdio.h>
int main(int argc,const char* argv[])
{
int sum = 1;
int n = 0;
printf("请输入一个数:");
scanf("%d",&n);
loop1:
sum *= n;
n--;
if(n)
{
goto loop1;
}
printf("%d\n",sum);
}
结语
希望这篇文章对你有所帮助