C语言深度剖析--不定期更新的第三弹

在这里插入图片描述
hello,everybody!最近又更新了哈,希望对大家有所帮助

switch case关键字

基本语法

switch(整型变量/常量/整型表达式){
    case 1:
        var 1;
        break;
    case 2:
        var 2;
        break;
    case 3:
        var 3;
        break;
    default:
        break;
}

switch case语句也和if语句一样具有判断和分支的功能,case进行判断,break进行分支

我们得出一个结论:

任何具有判定功能的语法,都必须具备:判定+分支

注意点

default可以放在任意的位置,不影响程序的运行,只不过按照语义来说,更习惯于放在程序后面

switch case语句不建议使用return 语句,虽然程序不会报错,但是这是一个不好的习惯,如果哪个程序员在调试的时候眼花了找不到为什么总是中途退出,会造成不必要的麻烦

再来看一个点:

看下面几行代码:

int main()
{
    const int a=10;
    switch(a)
    {
        case a:
            printf("%d",12);
            break;
            default:
            break;
    }
}

这里需要说明的是被const修饰的变量,可以理解为变成了常量,但是这里不能写成case a,编译器会报错

case语句的排列顺序

1.按字母或数字顺序排列各条case语句

2.把正常情况放在前面,把异常情况放在后面。

如果有多个正常情况和异常情况,把正常情况放在前面,并做好注释;把异常情况放在后面,同样要做好注释

还有几个关键点:

1.不要为了使用switch语句,而刻意创建变量

int main()
{
    int arr[]={1,2,3,4,5};
    for(int i=0;i<5;i++)
    {
        switch(arr[0])//可以这样来解决
        {
            case 1:
                printf("%d\n",12);
        }
        
	}
	return 0;
}

2.将default子句用于检查真正的默认情况
在这里插入图片描述
switch case 语句的相关总结**

1.switch语法结构中,case完成判定功能,break完成分支功能,default处理异常情况

2.case:执行语句==1:n,case多条语句(不能定义变量,如果需要,{},函数)break

3.case: 执行语句==n :1,多条case后续不写break

4.default:可以出现在任何地方,推荐放在结尾

在这里插入代码片

5.case:不能:const,普通的变量,建议要有好的case布局

do while for关键字

while循环

int main()
{
	int count=10;//循环条件初始化
    while(count>0)//循环条件判断
    {
		printf("%d\n",12);
        count--;//循环条件判断
    }
}

for循环

int main()
{
    for(int i=0;i<10;i++)
    {
		printf("%d\n",12);
    }
}

个人而言,更推荐for循环,因为不会轻易地忘掉循环的三个条件,同时观感更好

do while循环

int count=10//循环条件初始化
do
{
	printf("%d\n",1);
    count--;//循环条件判断
}
while(count>0);//循环条件判断,至少执行一次

补充内容-三种循环的死循环写法**

while

while(1)
{
    printf(".");
}

不要粗略地认为1就是真,0就是假,非零为真

for循环

int main()
{
	for(;;)
    {
		printf(" .");
    }
}

do while

int main()
{
	do
    {

    }
    while(1);
}

要提出一个概念:

任何C语言程序,在默认编译好之后,运行时,都会打开三个输入输出流

stdin:标准输入,FILE*stdin,键盘

stdout:标准输出,FILE*stdout,显示器

stderr:标准错误,FILE*stderr,显示器

拿getchar举例子

int main()
{
	while (1)
	{
		int c = getchar();
		if (c == '#')
		{
			break;
		}
		printf("%d", c);//注意不要添加\n,因为在终端运行的时候回车也算了一个换行符,这样会空两行
	}
	printf("while end...\n");
}

getchar 需要注意一个细节,前面的修饰类型是int在这里插入代码片

为什么不能够是char,char能表示返回成功,但是返回失败可能不行,因为char能表示的范围是0-255,二进制的0000 0000-1111 1111

,如果有个数是1 0000 0000 ,此时会进行截断,造成不准确

需要补充个结论:键盘输入的内容,或者往显示器打印的内容都是字符!!!

打个比方:

int main()
{
	int ret=printf("%d\n",1234);
    printf("%d\n",ret);
}

在这里插入图片描述

break continue关键字

首先来谈谈break

来看下面几行代码:

int main()
{
    while(1)
    {
		int c=putchar();
        if(c=='#')
        {
            break;//跳出循环
        }
        putchar(c);
    }
    printf("\n break out\n");
}

看一下运行结果:

在这里插入图片描述
如果是continue

int main()
{
    while (1)
    {
        int c = getchar();
        if (c == '#')
        {
            continue;//结束本次循环
        }
        putchar(c);
    }
    printf("\n break out\n");
	return 0;
}

在这里插入图片描述
在这里插入图片描述
那么又要有疑问的

跳出本次循环是从1开始还是2开始再来?

答案是2,因为还要再进行条件判定,是否能够进入循环

再来看for循环的continue关键字

在这里插入图片描述
看到程序运行的结果,我们可以得出这样的逻辑链,continue会先进行自增再进行判断循环条件

我们可以得出一个结论:

while ,do while continue都是回到条件判断处,但是for是到条件更新处,因为while,do while条件判定和条件耿欣的条件都是分离的

循环语句的使用注意点

1.在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU跨切循环层的次数

2.建议for语句的循环控制变量的取值采用“半开半闭区间”写法

好处是:循环次数明确,便于进行个数计算

goto语句

下面为用法示例:

    goto end;
    printf("%d\n", 1);
    printf("%d\n", 2);
    printf("%d\n", 3);
end:
    printf("%d\n", 4);
    printf("%d\n", 5);
    printf("%d\n", 6);

运行结果如下:

在这里插入图片描述
虽然在一些大型项目中会应用到goto关键字,但是建议还是不要使用goto语句,因为太灵活了,会破坏整体的结构性。

  • 23
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值