C语言学习笔记 -63.流程控制17 - 选择9 - if...else if多分支选择与常见错误解析
一、本节学习定位本节属于流程控制中的核心内容重点讲解if、else if、else 多分支选择结构的写法与常见错误。在 C 语言中程序并不是简单地从上到下全部执行。遇到if 语句时程序会根据条件表达式的真假选择不同的执行路径。因此理解if 语句的执行流程是看懂 C 程序的基础。本节重点包括if...else的基本结构else if多分支结构的执行规则多个条件同时成立时只执行第一个满足条件的分支else后面不能直接写条件表达式else (表达式);语法上可能成立但逻辑上没有实际意义成绩等级判断中区间条件的正确写法90 score 100这种数学写法在 C 语言中是错误的。二、if...else 的基本形式1. 基本语法if (表达式) { 语句A; } else { 语句B; }执行逻辑如下先判断if后面括号中的表达式如果表达式为真即非0执行语句A如果表达式为假即0执行else后面的语句Bif分支和else分支只能执行其中一个。2. 示例程序#include stdio.h int main(void) { if (3 2) { printf(AAAA\n); } else { printf(BBBB\n); } return 0; }3. 运行结果AAAA4. 程序分析3 2成立因此程序执行if分支中的语句printf(AAAA\n);else分支不会执行。三、常见错误一if 后误加分号导致 else 出错1. 错误写法if (3 2); printf(AAAA\n); else printf(BBBB\n);这段程序是错误的。2. 错误原因在 C 语言中单独一个分号可以构成一条空语句;因此if (3 2);等价于if (3 2) ;也就是说if实际控制的是一条空语句。于是错误代码会被理解为if (3 2) ; // if 控制的是空语句 printf(AAAA\n); // 已经不属于 if 结构 else // else 前面没有可匹配的 if printf(BBBB\n);当编译器执行到else时会发现前面已经没有可匹配的if因此会产生语法错误。3. 常见编译错误含义可能出现类似提示else without a previous if含义是else 前面没有可以匹配的 if四、else if 多分支结构当一个问题有多个判断条件时通常使用else if 多分支结构。1. 基本语法if (表达式1) { 语句A; } else if (表达式2) { 语句B; } else if (表达式3) { 语句C; } else { 语句D; }2. 执行规则程序会从上到下依次判断如果表达式1成立执行语句A后面的else if和else全部跳过如果表达式1不成立才判断表达式2如果表达式2成立执行语句B后面的分支全部跳过如果前面的条件都不成立才会继续向下判断最后的else表示“以上条件都不成立时执行”。五、多个条件同时成立时只执行第一个满足的分支1. 示例程序#include stdio.h int main(void) { if (3 2) { printf(AAAA\n); } else if (3 1) { printf(BBBB\n); } else { printf(CCCC\n); } return 0; }2. 条件分析条件是否成立3 2成立3 1成立虽然两个条件都成立但程序只会输出AAAA3. 原因分析else if的含义是否则如果……只有当前面的if条件不成立时才会进入后面的else if判断。因此if (3 2)已经成立并执行后整个if...else if...else结构就结束了后面的条件不会再判断。六、成绩等级判断示例截图中给出的成绩判断程序属于典型的多分支选择结构。其逻辑是分数范围输出结果score 100这是做梦90 score 100优秀80 score 90良好60 score 80及格0 score 60不及格但在 C 语言中不能直接写成数学形式90 score 100必须写成score 90 score 100七、错误写法不能写成 90 score 1001. 错误写法else if (90 score 100) { printf(优秀\n); }这不是正确的 C 语言区间判断。2. 错误原因在数学中90 score 100表示score在 90 到 100 之间。但在 C 语言中这个表达式会被按如下方式理解(90 score) 100其中90 score的结果只有两种表达式结果数值假0真1然后继续判断0 100或1 100这两个结果都为真。因此90 score 100并不能正确判断score是否在[90, 100]区间内。八、正确写法使用逻辑与运算符 1. 正确区间判断score 90 score 100含义是score 大于等于 90并且 score 小于等于 100只有两个条件同时成立整个表达式才成立。2. 常见区间写法对比数学含义错误写法C 语言正确写法90 score 10090 score 100score 90 score 10080 score 9080 score 90score 80 score 9060 score 8060 score 80score 60 score 800 score 600 score 60score 0 score 60九、成绩等级判断完整程序1. 示例代码#include stdio.h int main(void) { int score; printf(请输入成绩); scanf(%d, score); if (score 100) { printf(这是做梦\n); } else if (score 90 score 100) { printf(优秀\n); } else if (score 80 score 90) { printf(良好\n); } else if (score 60 score 80) { printf(及格\n); } else if (score 0 score 60) { printf(不及格继续努力\n); } return 0; }2. 程序说明代码作用scanf(%d, score);输入成绩score 100判断成绩是否超过正常范围score 90 score 100判断是否为优秀score 80 score 90判断是否为良好score 60 score 80判断是否为及格score 0 score 60判断是否为不及格十、没有 else 时可能出现逻辑漏洞上面的程序没有最终的else分支。如果输入负数例如-9程序执行过程如下判断条件是否成立score 100不成立score 90 score 100不成立score 80 score 90不成立score 60 score 80不成立score 0 score 60不成立所有条件都不成立因此程序不会输出任何等级信息。这说明else 不是必须写但如果不写 else就要确认是否已经覆盖所有可能情况。十一、改进版增加 else 处理非法成绩为了避免输入负数时没有任何输出可以增加最后的else。#include stdio.h int main(void) { int score; printf(请输入成绩); scanf(%d, score); if (score 100) { printf(这是做梦\n); } else if (score 90 score 100) { printf(优秀\n); } else if (score 80 score 90) { printf(良好\n); } else if (score 60 score 80) { printf(及格\n); } else if (score 0 score 60) { printf(不及格继续努力\n); } else { printf(成绩输入不合法\n); } return 0; }程序特点score 100单独处理大于 100 的异常情况score 0 score 100范围内按等级判断score 0时进入最后的else所有输入情况都有明确输出。十二、常见错误二else 后不能直接写条件表达式1. 错误结构截图中出现了类似结构if (表达式1) A; else if (表达式2) B; else if (表达式3) C; else (表达式4) D;这种写法是错误的。2. 错误原因else的含义是否则它本身不负责判断条件。如果还要继续判断条件必须写成else if (表达式4)不能写成else (表达式4)十三、正确写法一去掉 else 后面的条件如果最后一个分支表示“以上条件都不成立”应写成if (表达式1) { A; } else if (表达式2) { B; } else if (表达式3) { C; } else { D; }这里的else不需要条件表示表达式1、表达式2、表达式3 都不成立时执行 D。十四、正确写法二在 else 后加 if如果最后一个分支仍然需要判断条件应写成if (表达式1) { A; } else if (表达式2) { B; } else if (表达式3) { C; } else if (表达式4) { D; }这里的含义是表达式1 不成立再判断表达式2 表达式2 不成立再判断表达式3 表达式3 不成立再判断表达式4。十五、else (表达式); 的语法与逻辑问题1. 语法上可能通过的写法if (1 2) { printf(AAAA\n); } else if (1 5) { printf(BBBB\n); } else (5 10); printf(CCCC\n);这段代码语法上可以成立但逻辑上没有实际意义。2. 等价理解上面的代码等价于if (1 2) { printf(AAAA\n); } else if (1 5) { printf(BBBB\n); } else { (5 10); // 只是计算表达式结果被丢弃 } printf(CCCC\n); // 不属于 if...else if...else 结构3. 运行结果由于printf(CCCC\n);不受if...else控制所以它一定会执行。运行结果为CCCC4. 关键结论(5 10);是一条表达式语句它只是计算5 10的结果然后丢弃结果。由于没有赋值、没有输出、没有函数调用副作用所以这条语句没有实际意义。十六、else (表达式) 不加分号时为什么会出错1. 错误写法if (1 2) { printf(AAAA\n); } else if (1 5) { printf(BBBB\n); } else (5 10) { printf(CCCC\n); }或者else (5 10) printf(CCCC\n);2. 错误原因else后面必须跟一条合法语句。(5 10)本身只是一个表达式不是完整语句。表达式必须加分号才构成表达式语句(5 10);但是即使写成表达式语句它也只是被else控制的一条无实际意义的语句后面的printf仍然可能脱离else控制。十七、if...else if...else 常见错误总结表错误写法是否语法错误主要问题正确写法if (条件); printf(...); else ...是else找不到匹配的if删除if后的分号else (表达式) printf(...);是else后不是合法语句写成else if (表达式)else (表达式); printf(...);通常不是else控制无意义表达式printf脱离控制写成else if (表达式)或else { ... }90 score 100通常不是逻辑错误不能表示数学区间score 90 score 100没有最后的else不是可能存在未覆盖输入根据需要增加else十八、VSCode 中建议的调试方法1. 新建文件建议文件名if_else_error.c2. 编译程序在 VSCode 终端中执行gcc -Wall if_else_error.c -o if_else_error.exe3. 运行程序./if_else_error.exe4. 建议测试的数据对于成绩判断程序可以依次输入输入预期输出101这是做梦95优秀85良好70及格55不及格-9如果无最终else可能无输出改进版应输出成绩非法十九、本节核心结论else if多分支结构中只会执行第一个满足条件的分支。即使多个条件同时成立也不会全部执行。else后面不能直接写条件表达式。如果else后还需要判断条件必须写成else if (表达式)。如果else表示兜底分支则后面不应再写条件。else (表达式);虽然可能语法上成立但通常没有实际意义。数学中的连续区间写法不能直接用于 C 语言。判断区间时应使用逻辑与运算符。初学阶段建议使用花括号明确每个分支的控制范围。分析if...else if...else程序时要重点看“哪个分支先满足哪个分支会被跳过”。二十、参考出处《C程序设计第五版》谭浩强第 3 章“最简单的 C 程序设计——顺序程序设计”《C程序设计第五版》谭浩强第 4 章“选择结构程序设计”郝斌《C语言自学入门教程》对应内容if 常见错误、多分支判断、else 后条件表达式错误、成绩等级判断示例。

相关新闻

用C语言解释野指针

用C语言解释野指针

1. 野指针是什么野指针(Wild Pointer) 是指向未分配、已释放、无访问权限或作用域已销毁的内存区域的指针。对野指针进行解引用、读写操作属于 C 语言标准中的未定义行为:轻则程序直接崩溃(段错误 Segmentation Fault)…

2026/6/27 3:04:22阅读更多 →
天地一体化空间智控基座 平流层飞艇无感定位军营安防平台

天地一体化空间智控基座 平流层飞艇无感定位军营安防平台

一、方案总纲本平台由镜像视界浙江科技有限公司全栈自研打造,核心攻关内容纳入国家十四五重点课题研究序列,依托镜像视界浙江普陀时空大数据应用技术联合研究院完成平流层浮空感知、纯视觉无感定位、全域视频孪生成套技术迭代,全系统通过河南…

2026/6/27 3:04:22阅读更多 →
读信息安全专业考研还是直接就业更划算

读信息安全专业考研还是直接就业更划算

高考志愿填报时,信息安全专业越来越受到考生关注。但很多人在选择这个专业后,会面临一个很实际的问题:本科毕业直接找工作,还是继续读研深造?这个问题没有标准答案,不同选择对应完全不同的发展路径。想清楚…

2026/6/27 3:04:22阅读更多 →
零基础怎么做AI数据标注?我的入门实践记录

零基础怎么做AI数据标注?我的入门实践记录

声明:本文为通用技术分析,基于行业公开信息进行逻辑推演,不针对任何特定平台,不构成使用推荐。一、任务建模与分发策略AI数据标注平台的核心是将企业需求的标准数据拆解为标准化单元,分发给标注人员完成。一个标注任务…

2026/6/27 4:24:26阅读更多 →
表压缩新功能 compress for oltp ROW STORE COMPRESS ADVANCED ONLINE

表压缩新功能 compress for oltp ROW STORE COMPRESS ADVANCED ONLINE

ALTER TABLE ... COMPRESS FOR OLTP 对已有分区无效,因仅设置元数据标记而不重写物理块;压缩已有数据须用 MOVE PARTITION ... ROW STORE COMPRESS ADVANCED ONLINE 并重建索引。不能直接用 alter table ... compress for oltp 让已有分区数据变小——它…

2026/6/27 4:24:26阅读更多 →
用 responses-proxy 将 agnes-20-flash 接入原生 Codex:让免费 LLM 也能跑起来

用 responses-proxy 将 agnes-20-flash 接入原生 Codex:让免费 LLM 也能跑起来

最近在折腾原生 Codex 的模型接入时,遇到了一个比较典型的问题: 当前 Codex 主要支持 wire_api "responses" 模式,而很多第三方 OpenAI 兼容服务只提供 /v1/chat/completions 接口,无法直接接入。 其中,agn…

2026/6/27 4:24:26阅读更多 →
网络安全可以考什么证书?

网络安全可以考什么证书?

随着网络安全行业持续升温,越来越多人想进入这个领域。网络安全可以考什么证书?今天这篇文章一次性把国内外的重点网络安全证书讲清楚,帮你找到最适合自己的考证路线。一、为什么网络安全证书如此重要?网络安全行业拥有专业认证&a…

2026/6/27 4:24:26阅读更多 →
OpenClaw:自托管开源 AI 智能体网关,重新定义你的专属 AI 工作流

OpenClaw:自托管开源 AI 智能体网关,重新定义你的专属 AI 工作流

一、项目起源与核心定位OpenClaw 是 2025 年末诞生、2026 年正式定名的开源 AI 智能体网关项目,开发主体为 Peter Steinberger 团队,代码托管于 GitHub,采用宽松 MIT 开源协议,曾先后以 ClawdBot、Moltbot 为名迭代,最…

2026/6/27 4:24:26阅读更多 →
本地商户的获客指南,高德地图商户通到底能不能帮助本地商家获客当下本地实体行业竞争日趋激烈,餐饮、酒店、休闲娱乐、生活服务、汽修美容等各类线下商户,早已告别“坐等上门”的传统经营模式。多数中小本地商

本地商户的获客指南,高德地图商户通到底能不能帮助本地商家获客当下本地实体行业竞争日趋激烈,餐饮、酒店、休闲娱乐、生活服务、汽修美容等各类线下商户,早已告别“坐等上门”的传统经营模式。多数中小本地商

当下本地实体行业竞争日趋激烈,餐饮、酒店、休闲娱乐、生活服务、汽修美容等各类线下商户,早已告别“坐等上门”的传统经营模式。多数中小本地商户普遍面临两大核心难题:一是线下门店流量固定,自然到店客量增长乏力;二…

2026/6/27 4:19:26阅读更多 →
【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体 一文搞定到底什么是智能体【人工智能】一文搞定到底什么是智能体一. LM,WorkFlow,Agent分别有什么么不同二. Agent的思考过程是怎样的三. Agent的五个核心部分1)LLM2)Prompt3)Me…

2026/6/26 11:03:22阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

1. 嵌入式GUI控件:从原理到实战的深度解析在嵌入式系统开发中,图形用户界面(GUI)的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台,嵌入式设备的GUI需要在有限的CPU性能、内存空间…

2026/6/26 4:15:25阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

Google AI Studio 300美元额度的真相与实战指南

1. 这300美金不是“送钱”,而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时,第一反应可能是:又一个免费额度?领完就完事?我亲手试过——这300美金根本不是红包,而是一张入场券&…

2026/6/26 9:29:01阅读更多 →
10分钟AI语音克隆与实时变声:Retrieval-based-Voice-Conversion-WebUI完整指南

10分钟AI语音克隆与实时变声:Retrieval-based-Voice-Conversion-WebUI完整指南

10分钟AI语音克隆与实时变声&#xff1a;Retrieval-based-Voice-Conversion-WebUI完整指南 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrie…

2026/6/27 0:04:03阅读更多 →
Layerdivider:3分钟AI智能分层,彻底告别手动抠图时代

Layerdivider:3分钟AI智能分层,彻底告别手动抠图时代

Layerdivider&#xff1a;3分钟AI智能分层&#xff0c;彻底告别手动抠图时代 【免费下载链接】layerdivider A tool to divide a single illustration into a layered structure. 项目地址: https://gitcode.com/gh_mirrors/la/layerdivider 还在为复杂的图像分层工作烦…

2026/6/27 0:04:03阅读更多 →
Tomcat中X-Frame-Options配置实战:防御点击劫持的四种方法与最佳实践

Tomcat中X-Frame-Options配置实战:防御点击劫持的四种方法与最佳实践

1. 项目概述&#xff1a;为什么X-Frame-Options是Web安全的“防盗门”&#xff1f;最近在排查一个老项目的安全审计报告时&#xff0c;又被提到了“点击劫持”风险&#xff0c;矛头直指缺失的X-Frame-Options响应头。这已经不是第一次了&#xff0c;很多开发团队&#xff0c;尤…

2026/6/27 0:04:03阅读更多 →