逗号运算符、空语句、跳转语句(break\continue\goto\return\exit)

1.逗号运算符(,)

在c语言中有多个表达式时可以用逗号分开,逗号运算符是所有运算符里级别最低的,它的结合方向是从左至右,其中用逗号分开的表达式分别计算,最终整个表达式的值是最后一个表达式的值。(特别注意运算顺序)

示例:

#include<stdio.h>
int main()
{
    int a=2,b=5,c=0;
    c=a+b,a-b,b++;            //注意运算符优先级;
    return 0;
}

此程序中要特别注意运算符优先级,里面赋值运算符“=”级别高于逗号“,”,所以a+b首先赋值给c,然后依次往右执行,最终c的值为7,b的值为6.

#include<stdio.h>
int main()
{
    int a=2,b=5,c=0;
    c=(a+b,a-b,b++);            //注意运算顺序
    return 0;
}

此程序比上一个程序只多加了一个括号,但是结果是不相同的,加了括号以后就要最先运算括号内部的,从左往右依次执行,前面说过,用逗号分开的表达式分别计算,最终整个表达式的值是最后一个表达式的值,此时c的值就为6.

2.空语句

简单来说,空语句就是末尾除了分号(;)什么也没有,如:

#include<stdio.h>
int main()
{
    int a=0;
     ;                    //空,不执行任何操作
     int j=1;
    return 0;
}

但是空语句可以引起很多不易查找到的错误,在if、while、for后加上分号(;)分号创建了空语句,从而导致if、while、for语句提前结束或造成死循环,在if语句中,圆括号后加分号就相当于没有了判断条件,无论表达式是什么,后面的操作都一样。

示例1:

#include<stdio.h>
int main()
{
    int a=0;
    scanf("%d",a);
    if(a>10)                        //if(a>10);
    {
         printf("%d\n",a);
    }
    return 0;
}

 示例2:

#include<stdio.h>
int mian()
{
    int i=0;
    while(i<10)                //while(i<10);
    {
        printf("i=%-3d",i); 
    }
    return 0;
}

 示例3:

#include<stdio.h>
int mian()
{
    int i=0;
    for(i=0;i<10;i++)                   //for(i=0;i<10;i++);
    {
        printf("i=%-3d",i);
    }
    return 0;
}

以上两个程序都是可以正常执行的,但是在示例1中if(a>10)后面加分号以后,if判断语句不再是后面printf语句的执行条件,所以不管输入的a值是多少都会打印;

在示例2中while(i<10)后加分号就会导致while循环后跟一个空语句成为死循环;

在示例3中for(i=0;i<10;i++)后加分号也是跟一个空语句,for循环中i++等于10时退出循环,最终执行下一个语句,只打印出i=10;

但是空语句不仅如此,只要是编译链接过程中不形成机器代码的语句也是空语句,如:全局变量,静态变量,在编译链接时存放在数据区;

#include<stdio.h>
int c=1;               //全局变量,c的数据等于1,是空语句
int main()
{
    static int a=0;        //空语句
    int b=8;               //不是空语句
    return 0;
}

3.跳转语句(break\continue\goto\return\exit)   

3.1break

break只能用于switch语句和循环语句中,用来跳出switch语句和循环语句,然后执行后面的语句。

#include<stdio.h>
int main()
{
    for(int i=0;i<3;i++)
    {
        for(int j=0;j<3;j++)
        {
            for(int n=1;n<10;n++)
            {
                if(n%3==0) break;      //当n是3的倍数时跳出循环
                printf("%d     ",n);
            }
            printf("\n");
            printf("end1\n");
        }
        printf("\n");
        printf("end2\n");
    }
    return 0;
}

 

注意:break一次只能跳出一重循环,进而执行此循环之后的语句;

3.2continue

continue只能用于循环语句中,用来终止本次循环,跳过后面语句,然后进行下一次循环(取决于判断条件)。continue与break的区别就在于continue只终止本轮循环,而break跳出整个这一层循环。

#include<stdio.h>
int mian()
{
    for(int i=0;i<10;i++)
    {
        if(i%3==0)  continue;
        printf("%-3d",i);
    }
    return 0;
}

 

注意:使用continue容易再while循环和do  while循环中造成死循环

示例:

#include<stdio.h>
int main()
{
    int n=100;
    int i=0;
    while(i<n)
    {
        if(i%2==0)
        {
            continue;         
        }
        ++i;
    }
    return 0;
}

此程序有错误,当i=0时执行if语句,continue跳出本轮循环,++i不执行,下一轮循环开始时i仍然等于0,如此往复下去造成死循环。

3.3goto

使用goto时需要设置一个标号语句,这个标号语句控制goto转移到下一个地方。

#include<stdio.h>
int main()
{
    for(int i=0;i<10;i++)
    {
        if(i==5) 
        {
             goto put;  //put是标号,可用以字母或下滑线开头的字符串作为标号,如:put、in_put等
        }
        printf("%-3d",i);
    }
   put:                               //标号后加冒号,表示goto转移到这里执行后面的语句
   printf("end");
   return 0;
}

注意:goto语句一般是需要一次性跳出多重循环时使用

示例:

#include<stdio.h>
int main()
{
    for(int i=0;i<3;i++)
    {
        for(int j=0;j<3;j++)
        {
            for(int n=1;n<10;n++)
            {
                if(n%3==0) goto input;      //当n是3的倍数时跳出所有循环
                printf("%d     ",n);
            }
            printf("\n");
            printf("end1\n");
        }
        printf("\n");
        printf("end2\n");
    }
    input:                             
    printf("end\n");
    return 0;
}

 

3.4return和exit

return用于结束函数的执行,在主函数中同exit等价,用于终止程序。通常当函数返回类型为void时return可省略也可作为程序或函数的标志。使用exit时要添加头文件"stdlib.h"

示例:

#include<stdio.h>
#include<stdlib.h>
void NULL()
{
     return ;            //函数结束的标志,也可省略
}
int main()
{
    int a=0;
    printf("%d\n",a);
    return 0;             //也可用exit(0)
}

在子函数中return与exit不同的是:return用于将一个值返回给调用者,结束此函数,而exit出现在子函数中时也会终止整个程序。

注意:exit括号内的参数0表示正常(成功)结束,1表示异常终止。

#include<stdio.h>
#include<stdlib.h>
int add(int a,int b)
{
    int c=a+b;
    return c;         //将c的值返回给调用者,结束函数
}
int main()
{
    int x=9,y=7,z=0;
    z=add(x,y);        //z用来接受add函数返回的值
    printf("z=%d\n",z);
    return 0;          //终止程序
}

//最终输出z=16;
#include<stdio.h>
#include<stdlib.h>
int add(int a,int b)
{
    int c=a+b;
    exir(1);          //整个程序异常终止,
    return c;         //将c的值返回给调用者,结束函数
}
int main()
{
    int x=9,y=7,z=0;
    z=add(x,b);        //z用来接受add函数返回的值
    printf("z=%d\n",z);
    return 0;          //终止程序
}


//什么也不输出;

在c语言中0和1作为exit的参数可分别用EXIT_SUCCESS和EXIT_FAILURE来代替,效果相同,因为EXIT_SUCCESS和EXIT_FAILURE是定义在<stdlib.h>中的宏,值分别为0和1.

 

 

 

 

  • 如有错误请评论指正,谢谢!

 

 

 

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值