news 2026/10/27 10:32:03

C语言初学日记:If-Else、Switch与短路求值的实战踩坑

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C语言初学日记:If-Else、Switch与短路求值的实战踩坑

C语言初学日记:If-Else、Switch与短路求值的实战踩坑

今天学习了C语言的分支结构(if-else 和 switch)以及逻辑操作符(&&、||、!)。为了巩固知识,我手敲了几个经典案例,并测试了逻辑运算中的“短路现象”。整理如下:

【第一部分:逻辑运算符与经典“闰年”判断】

  1. 知识点:&&(逻辑与,全真才真)、||(两边都为真才为真)、!(逻辑非)
  2. 代码练习问题:判断某一年是不是闰年
intyear=2024;// 方法一:使用逻辑组合,最简洁if((year%4==0&&year%100!=0)||(year%400==0)){printf("%d 是闰年\n",year);}else{printf("%d 不是闰年\n",year);}

3.我的错误及感受:使用 && 和 || 组合时,一定要用括号把条件括起来,不然运算优先级会乱!

【第二部分:大坑预警!逻辑运算符的“短路求值”】

  1. 测试代码:我今天特意写了一段代码来测试:
cinta=1,b=2,d=4;inti=a++&&++b&&d++;// 打印结果:a=2, b=2, d=4 (注意b和d没变!)

  1. 踩坑原因:原来 && 左边如果是假(0),右边的代码根本就不会执行了!这叫做短路求值。同理,|| 的左边如果为真,右边也不会执行。
  2. 经验总结:以后写代码尽量别把 a++ 这种自增运算和逻辑运算符混在一起用,太容易出bug了

【第三部分:Switch 语句与 Case 穿透】

  1. 场景:练习把数字 1-7 转换成星期几。
  2. 代码实操:
intday=0;//switch练习一scanf_s("%d",&day);switch(day){case1:printf("星期一\n");break;case2:printf("星期二\n");break;case3:printf("星期三\n");break;case4:printf("星期四\n");break;case5:printf("星期五\n");break;case6:printf("星期六\n");break;case7:printf("星期天\n");break;}

intday=6;switch(day){case1:case2:case3:case4:case5:printf("早八人,早八魂\n");break;// 运行到这里跳出case6:case7:printf("周末!关掉闹钟,爽睡11点\n");break;default:// 处理输入错误的情况printf("输入错误,请输入1到7的数字\n");break;}
  1. 我的感悟:switch 里的 break 非常关键。如果没有 break,满足条件的 case 下面的代码都会被执行(这就是 case 穿透)。default 和 if-else 里的 else 一样,处理所有不符合的情况。

【第四部分:拓展练习(石头剪刀布)】

今天还写了一个简单的石头剪刀布逻辑:

charplayer='s';//石头剪刀布charcomputer='j';//if (player == computer)//{printf("平局!再来一局\n");}elseif((player=='s'&&computer=='j')||(player=='j'&&computer=='b')||(player=='b'&&computer=='s'))//这里一开始忘记用()把这个代码括起来了,导致了错误{printf("你赢了\n");}else{printf("你输了\n");}

教训:逻辑嵌套一多,括号必须加,千万别盲目相信自己的优先级记忆。

第五部分:if else的练习

1.今天跟着老师写的练习,并且还将题目与输入输出结合了起来

inthas_key=0;inthp=0;intis_cursed=0;scanf_s("%d%d%d",&has_key,&hp,&is_cursed);//原题是没有输入函数的if((has_key>=1&&hp>=30)||is_cursed>=1){printf("开启隐藏房间--诅咒之屋\n");}else{printf("前方的门打不开\n");}


教训:记住if后面的括号后面不需要打分号

【总结】

今天的分支结构练得很爽。尤其是弄懂了“短路求值”,感觉自己对计算机的底层逻辑又明白了一点。明天准备进攻循环语句(for/while),继续加油!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/27 10:30:35

DDoS、CC 攻击与高防 CDN:维科云能提供什么层级防护?

DDoS、CC 攻击与高防 CDN:维科云能提供什么层级防护? 一句话结论: DDoS 多为流量型(L3/L4);CC 是伪装成正常请求的 应用层(L7) 耗尽。高防 CDN 在边缘清洗后再回源。维科云 Veikor C…

作者头像 李华
网站建设 2026/10/27 10:29:37

手机拍屏幕行为模型二次训练方案

范围:为"手机对着电脑屏幕拍照"行为预警系统,调研怎么训:YOLO 检测模型二次训练的完整做法(数据/超参/冻结策略/部署)、ROI 分类器备选线、Qwen2.5-VL LoRA 微调复核模型、视频动作模型微调的适用条件&#…

作者头像 李华
网站建设 2026/10/27 10:29:24

微信小程序 scroll-view 实现纵向、横向滚动页面

摘要:本篇是小程序基础组件 scroll-view 练习案例,同时也是课程作业。使用scroll-y实现纵向滚动、scroll-x实现横向滚动,利用 CSS 伪元素::before渲染页面文字,最后在横向滚动区域新增一页,内容为阳光灿烂,…

作者头像 李华
网站建设 2026/10/27 10:26:09

Linux网络篇——UDP(一)之C++实现UDP英汉词典翻译服务器

牢蒯的源码在下面的仓库里,各位大佬可以自行取用,古法编程,难免有bug,大佬们可在评论区指出错误。 https://gitee.com/laotian666/linux_storage.git 0 前置知识:UDP网络编程核心接口与结构体 UDP属于无连接传输协议…

作者头像 李华
网站建设 2026/10/27 10:23:56

AI智能体席卷制造业,3000万人才缺口背后的程序员生存指南

2025年被称为AI智能体元年,制造业正经历从“人驱动”向“数智原生”的变革。企业招聘标准从经验筛选转向AI协同,急需既懂AI又懂制造的复合型人才。目前制造业人才缺口近3000万,蓝领招工难,高技能人才稀缺。本文揭示人才真相&#…

作者头像 李华