首页 / 资讯中心 / 文章详情

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

C语言初学日记:If-Else、Switch与短路求值的实战踩坑 ★ FEATURED ARTICLE
C语言初学日记If-Else、Switch与短路求值的实战踩坑今天学习了C语言的分支结构if-else 和 switch以及逻辑操作符、||、!。为了巩固知识我手敲了几个经典案例并测试了逻辑运算中的“短路现象”。整理如下【第一部分逻辑运算符与经典“闰年”判断】知识点逻辑与全真才真、||两边都为真才为真、!逻辑非代码练习问题判断某一年是不是闰年intyear2024;// 方法一使用逻辑组合最简洁if((year%40year%100!0)||(year%4000)){printf(%d 是闰年\n,year);}else{printf(%d 不是闰年\n,year);}3.我的错误及感受使用 和 || 组合时一定要用括号把条件括起来不然运算优先级会乱【第二部分大坑预警逻辑运算符的“短路求值”】测试代码我今天特意写了一段代码来测试cinta1,b2,d4;intiabd;// 打印结果a2, b2, d4 注意b和d没变踩坑原因原来 左边如果是假0右边的代码根本就不会执行了这叫做短路求值。同理|| 的左边如果为真右边也不会执行。经验总结以后写代码尽量别把 a 这种自增运算和逻辑运算符混在一起用太容易出bug了【第三部分Switch 语句与 Case 穿透】场景练习把数字 1-7 转换成星期几。代码实操intday0;//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;}intday6;switch(day){case1:case2:case3:case4:case5:printf(早八人早八魂\n);break;// 运行到这里跳出case6:case7:printf(周末关掉闹钟爽睡11点\n);break;default:// 处理输入错误的情况printf(输入错误请输入1到7的数字\n);break;}我的感悟switch 里的 break 非常关键。如果没有 break满足条件的 case 下面的代码都会被执行这就是 case 穿透。default 和 if-else 里的 else 一样处理所有不符合的情况。【第四部分拓展练习石头剪刀布】今天还写了一个简单的石头剪刀布逻辑charplayers;//石头剪刀布charcomputerj;//if (player computer)//{printf(平局!再来一局\n);}elseif((playerscomputerj)||(playerjcomputerb)||(playerbcomputers))//这里一开始忘记用把这个代码括起来了导致了错误{printf(你赢了\n);}else{printf(你输了\n);}教训逻辑嵌套一多括号必须加千万别盲目相信自己的优先级记忆。第五部分if else的练习1.今天跟着老师写的练习并且还将题目与输入输出结合了起来inthas_key0;inthp0;intis_cursed0;scanf_s(%d%d%d,has_key,hp,is_cursed);//原题是没有输入函数的if((has_key1hp30)||is_cursed1){printf(开启隐藏房间--诅咒之屋\n);}else{printf(前方的门打不开\n);}教训记住if后面的括号后面不需要打分号【总结】今天的分支结构练得很爽。尤其是弄懂了“短路求值”感觉自己对计算机的底层逻辑又明白了一点。明天准备进攻循环语句for/while继续加油
阅读完成 · 觉得有帮助?
咨询建站