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

news2025/6/8 5:50:17

在这里插入图片描述
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语句,因为太灵活了,会破坏整体的结构性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2112725.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第4章-02-用WebDriver驱动浏览器页面截图

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年CSDN全站百大博主。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 🏆本文已收录于专栏:Web爬虫入门与实战精讲,后续完整更新内容如下。 文章…

NX重要操作函数调用流程

1.文件打开 2.鼠标移动操作 3.定时器

Vue3+Ts封装类似于Element-plus的图片预览组件

组件目录结构如下: options.ts文件用来存储配置文件, 代码如下: import {isFirefox} from ./tools;export type ImageViewerAction = zoomIn | zoomOut | clocelise | anticlocelise;export const mousewheelEventName = isFirefox() ? DOMMouseScroll : mousewheel;// 键…

自然语言处理系列五十三》文本聚类算法》文本聚类介绍及相关算法

注&#xff1a;此文章内容均节选自充电了么创始人&#xff0c;CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》&#xff08;人工智能科学与技术丛书&#xff09;【陈敬雷编著】【清华大学出版社】 文章目录 自然语言处理系列五十三文本聚类算法》文本聚类介绍及相关算法K…

isalnum函数讲解 <ctype.h>头文件函数

目录 ​1.头文件 2.isalnum函数讲解​​​​​​​ 方源一把抓住VS2022&#xff0c;顷刻 炼化&#xff01; 1.头文件 以上函数都需要包括头文件<ctype.h> &#xff0c;其中包括 isalnum 函数 #include<ctype.h> 2.isalnum函数讲解 isalnum函数是一种判断字符…

解决:Module build failed (from ./node_modules/sass-loader/dist/cjs.js)问题

一、问题 Module build failed (from ./node_modules/sass-loader/dist/cjs.js): Error: Cannot find module sass 二、解决方法 1.清除缓存 npm cache clean --force2.重构项目 npm install 3.更新&#xff08;获取最新的&#xff09;node-sass和sass-loader依赖包 npm …

OpenAI SORA团队负责人 通往智能的方式 报告笔记

OpenAI SORA团队负责人 通往智能的方式 报告笔记 这个报告其实是2024年智源大会的主旨报告&#xff0c;OpenAI SORA和DALL-E团队负责人Aditya Ramesh给出的一段有关多模态大模型的报告。我去听了现场&#xff0c;感觉倍受启发&#xff0c;但是感觉很多并不能当场理解&#xff…

赢麻了!算法学不懂都来翻烂这本书,吊打国内所有晦涩难懂的毒教材!!

这本书巧妙的运用了简洁的图表和示意图&#xff0c;帮助读者更加直观的理解各种机器学习算法的工作原理和应用场景。 就是一本既全面又容易上手的机器学习宝典&#xff0c;适合各种水平的读者&#xff0c;不管你是对AI感兴趣的爱好者&#xff0c;还是正在从事相关工作的专业人…

Linux系统应用(5)——编译器gcc

个人内容简介&#xff1a; &#x1f343;个人主页&#xff1a;诉清风2023 &#x1f388;逆转时间的公式&#xff0c;就是珍惜现在ദ്ദി˶&#xff70;̀֊&#xff70;́ ) ✧ 目录 个人内容简介&#xff1a; &#x1f388;逆转时间的公式&#xff0c;就是珍惜现在ദ്ദ…

局域网一套键鼠控制两台电脑(台式机和笔记本)

服务端&#xff08;有键盘和鼠标的电脑作为服务端&#xff09; 下载软件 分享文件&#xff1a;BarrierSetup-2.3.3.exe 链接&#xff1a;https://pan.xunlei.com/s/VO66rAZkzxTxVm-0QRCJ33mMA1?pwd4jde# 配置服务端 一&#xff0c; 二&#xff0c; 客户端屏幕名称一定要和…

springboot+vue+mybatis智慧篮球馆预约+PPT+论文+讲解+售后

近些年来&#xff0c;随着科技的飞速发展&#xff0c;互联网的普及逐渐延伸到各行各业中&#xff0c;给人们生活带来了十分的便利&#xff0c;智慧篮球馆预约利用计算机网络实现信息化管理&#xff0c;使整个智慧篮球馆预约的发展和服务水平有显著提升。 本文拟采用Eclipse开发…

虚拟机ubuntu配置opencv和opencv_contrib

前期准备 1.下载opencv和opencv_contrib源码 opencv-4.6.0&#xff1a;https://opencv.org/releases/ opencv_contrib-4.6.0&#xff1a;https://github.com/opencv/opencv_contrib 在ubuntu直接下载或者在window上下好传到虚拟机里都可以 自己找个地方把他们解压&#xf…

[项目][CMP][Thread Cache]详细讲解

目录 1.设计&结构2.申请内存3.释放内存4.框架 1.设计&结构 Thread Cache是哈希桶结构&#xff0c;每个桶是一个按桶位置映射大小的内存块对象的自由链表 每个线程都会有一个Thread Cache对象&#xff0c;这样每个线程在这里获取对象和释放对象时是无锁的 TLS – Thr…

深入理解Kotlin中的异步网络请求处理

在现代移动和Web应用开发中&#xff0c;异步网络请求处理是核心功能之一。Kotlin&#xff0c;作为一种现代、简洁且功能强大的编程语言&#xff0c;提供了多种方式来处理异步任务&#xff0c;使得开发者能够编写出更加高效和响应迅速的应用。本文将深入探讨Kotlin中的异步网络请…

FPGA开发:Verilog数字设计基础

EDA技术 EDA指Electronic Design Automation&#xff0c;翻译为&#xff1a;电子设计自动化&#xff0c;最早发源于美国的影像技术&#xff0c;主要应用于集成电路设计、FPGA应用、IC设计制造、PCB设计上面。 而EDA技术就是指以计算机为工具&#xff0c;设计者在EDA软件平台上…

Python-获取excel数据 - 成绩统计

Pandas库基础操作 pandas库是Python中非常受欢迎的数据分析库&#xff0c;提供了快速、灵活和富有表现力的数据结构&#xff0c;便于轻松地进行数据清洗和分析。因为它不是标准库&#xff0c;使用前确保环境已经安装了Pandas库。 pip install pandas接下来&#xff0c;通过一…

LLM Attention and Rotary Position Embedding(旋转位置编码)

旋转位置编码&#xff08;Rotary Position Embedding&#xff0c;RoPE&#xff09;是一种能够将相对位置信息依赖集成Attention计算里的方法。就是在做词表映射的时候不是单一的进行一个embedding计算&#xff0c;还考虑位置信息。 一些资料 [1] https://arxiv.org/pdf/2104.0…

Ubuntu20.04+ros-noetic配置Cartographer

一、概述 因为要配置激光SLAM&#xff0c;Cartographer属于激光雷达SLAM 中比较经典的一款&#xff0c;在学习之前先将其在Ubuntu20.04首先配置出来并成功运行demo。 二、具体操作 &#xff08;一&#xff09;概述 使用平台是Windows的wsl2上的Ubuntu20.04子系统&#xff0c;…

.NET技巧 - 控制台应用隐藏窗口

.NET技巧 - 控制台应用隐藏窗口 前言 起初我通过C#创建控制台应用程序免杀shellcode加载器时&#xff0c;默认会启动一个cmd控制台窗口 但当我们希望将其免杀loader用于钓鱼时&#xff0c;我们必然不希望出现这种情况。在执行进程迁移、进程注入、进程镂空等持久化权限维持操…

如何在Word中插入表格并进行高级格式化:冒号对齐、添加下划线并分栏

如何在Word中插入表格并进行高级格式化&#xff1a;详细教程 在Word中&#xff0c;表格是一个非常常用的工具&#xff0c;能够帮助我们更好地组织和展示信息。除此之外&#xff0c;本文还将深入探讨如何实现冒号对齐、添加专业的下划线以及隐藏表格线等高级技巧。通过这些技巧…