C语言学习笔记(七)————分支语句相关

2023-11-18

1)单独一个分号是空语句,在一些情况下有重要作用

2)使用if-else语句时,如果条件成立,要执行多条语句,这里要用一对 { } 封装一个代码块。如果if / else后面是单条语句则不用大括号括起。

3)注意C语言中if-else遵循就近原则,不看缩进,else是和它离的最近的if匹配的。例如

#include <stdio.h>
int main()
{
    int a = 0;
    int b = 2;
    if(a == 1)
        if(b == 2)
            printf("hehe\n");
    else
        printf("haha\n");
    return 0;
}

结果输出是空,因为else自动跟第二个if进行匹配了,若想改正,应使用大括号,改正为:

#include <stdio.h>
int main()
{
    int a = 0;
    int b = 2;
    if(a == 1)
   {
        if(b == 2)
       {
            printf("hehe\n");
       }
   }
    else
   {
         printf("haha\n");
   }       
    return 0;
}

4)注意判断条件里的判等是==,不要写成=,否则是赋值语句,值为真。

      所以一般在判断常量和变量是否相等时,把常量放在前面,这样即使写错等号,也会产生报错,因为变量是无法赋值给常量的。

5)switch语句中记得在每个最后加上break,否则会将入口后面的都执行,比如case 3进去后,4567....都会执行

当然也有例外:比如需求: 1. 输入1-5,输出的是“weekday”; 2. 输入6-7,输出“weekend

#include <stdio.h>
//switch代码演示
int main()
{
    int day = 0;
    switch(day)
   {
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
            printf("weekday\n");
            break;
        case 6:
        case 7:
            printf("weekend\n");
            break;
        default:
            printf("输入错误\n");
            break;

   }
    return 0;
}

 所以break语句 的实际效果是把语句列表划分为不同的分支部分。

default表示默认值,在输入9,10之类的时输出

编程好习惯 在最后一个 case 语句的后面加上一条 break语句。 (之所以这么写是可以避免出现在以前的最后一个 case 语句后面忘了添加 break语句)。

6)default子句

如果表达的值与所有的case标签的值都不匹配怎么办? 其实也没什么,结构就是所有的语句都被跳过而已。 程序并不会终止,也不会报错,因为这种情况在C中并不认为是个错误。 但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢? 你可以在语句列表中增加一条default子句,把下面的标签 default: 写在任何一个 case 标签可以出现的位置。 当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。 所以,每个switch语句中只能出现一条default子句。 但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。

编程好习惯 在每个 switch 语句中都放一条default子句是个好习惯,甚至可以在后边再加一个 break 。 

7)注意switch(整型表达式),后面必须是整型,不能是浮点型。

      而case 整形常量表达式: 后面也必须是整型,且为常量。比如可以是(1+0)。但不能是1.0或者变量i

注意case后面有冒号

8)练习:

#include <stdio.h>
int main()
{
    int n = 1;
    int m = 2;
    switch (n)
   {
    case 1:
            m++;
    case 2:
            n++;
    case 3:
            switch (n)
           {//switch允许嵌套使用
             case 1:
                    n++;
             case 2:
                    m++;
                    n++;
                    break;
           }
    case 4:
            m++;
            break;
    default:
            break;
   }
    printf("m = %d, n = %d\n", m, n);
    return 0;
}

答案是5,3   注意case3的break跳出的是内部的switch,调到外面case4了 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言学习笔记(七)————分支语句相关 的相关文章

  • 计网第四章(网络层)(三)(定长掩码和变长掩码)

    IPV4地址的应用规划 定长的子网掩码FLSM 使用同一个子网掩码划分子网 每个子网所分配的IP地址数量相同 造成IP地址的浪费 变长的子网掩码VLSM 使用不同的子网掩码划分子网 每个子网所分配的IP地址数量可以不相同 尽可能地减少对IP
  • 巨人互动

    Facebook是全球最大的社交媒体平台之一 每天有数十亿的用户在其上发布 分享和交流各种内容 为了维护平台的安全性和用户体验 Facebook制定了严格的风控规则来监测和处理违规行为 下面小编讲讲Facebook风控规则 巨人互动 Goo
  • Graphviz 安装教程

    下载安装 windows版本下载地址 http www graphviz org Download windows php 选择需要的版本就行了 安装时勾选下面方框中的选项 将路径添加到系统路径中 这一步不选的话就需要人为添加路径 配置环境
  • CSS实现渐变色边框(Gradient borders)的5种方法

    1 使用border image CSS 提供了 border image 属性用于给 border 绘制复杂图样 与 background image 类似 我们可以在 border 中展示image和linear gradient 通过
  • c++STL常用容器之Queue容器——全面总结(附案例解析)(十五)

    这里有C STL 全面总结详细教程 附案例解析 持续更新中 目录 queue 容器 queue 基本概念 queue 常用接口
  • php 访问 HTTP 网址

    1 只需获取状态码 判断网址是否正常打开 url https www baidu com array get headers url 1 print r array 判断是否正常打开 url https www baidu com arra
  • SpringBoot项目整合JPA+QueryDSL,及apt-maven-plugin报错问题解决

    闲暇之余项搞个JPA的Demo 采用的是SpringBoot JPA QueryDSL 开发工具为Eclipse JPA官网 https spring io projects spring data jpa QueryDSL官网 http
  • Specified class is an interface

    错误 在springboot 启动时候出现该错误 表示有重复的mapper 而且两个mapper 都加了 Mapper注解 或者在mybatis的配置文件中配置了 所以会导致 混乱 解决方法 根据报错提示找到多余的mapper 进行统一化处
  • Jedis之Java操作redis实现模拟验证码发送操作

    import cn hutool core util RandomUtil import redis clients jedis Jedis import java util Scanner author oliverloki Descri

随机推荐

  • keil找不到device,怎么办?

    下载好的keil 准备调试程序 却发现这个问题 找不到我需要的芯片啊啊啊 头大 后面发现是缺少相应的pack 安装keil时 好像没有自动装上STM32系列芯片 所以得需要自己安装 百度一下 找一些资源 然后 把途中红色框住的 分别放在安装
  • 对字符串进行正则取子串

    题目是这样的 对一段HTML网页内容 解析出其中所有的键值对 比如其中type text type为属性 text为值 二者为一个键值对 内容如下
  • Day4-1 反射、可变变量、线程池和Tomcat调优

    反射 Class的三种获取方式 方式一 通过Class forName获取 Class cla1 Class forName lt 类名 gt 方式二 通过类属性 lt 类名 gt class获取 Class cla2 lt 类名 gt c
  • uniapp本地插件列表为空的问题

    在开发中 我遇到本地插件列表为空的问题 问题来源 当我们在打包时不想选择本地的某个插件 但是 但是删除 再去选择 你会发现 来列表为空 也不会报错 解决方案 1 我们删除造成问题后的导入原生插件 然后重新导入 我就是这样解决的 可能你改原生
  • Android OkHttp4 RequestBody.create()过时解决办法 kotlin、java版本

    前段时间 OKhttp3已升级到Okhttp4 编写语言由java过渡到kotlin 而以前okhttp3经常用到的post提交数据的 RequestBody create 已过时 并且换成了kotlin的新特性写法 okhttp3 pos
  • Android WebView使用技巧

    1 不使用WebView缓存 使用场景 通过WebView输入用户名和密码进行登录 退出登陆后 再进行登录会默认是之前输入的用户名和密码登录 那么使用如下方式可以设置webview的缓存模式 WebSettings seting web v
  • 存储过程中的when others then 和 raise 何意义?

    EXCEPTION when others then rollback dbms output put line code sqlcode dbms output put line errm sqlerrm raise when other
  • MATLAB初学_分类方法_4.0

    一 K 近邻分类 K 近邻算法是一种基于实例的非参数的分类方法 其作用原理是计算每个训练样例到待分类样品间的距离 取和待分类样品距离最近的看k个训练样例 k个样品中那个类别的训练样例占多数 则待分类元组就属于该类 2 1 K NN算法具体步
  • linux文件重命名命令

    linux下重命名文件有两种方式 1 较简单的处理命令 mv mv 原文件名 新文件名 如 mv myFile newName 将MyFile重命名为newName 2 linux提供了一个重命名文件命令 rename rename fro
  • HDR技术

    转自 http digi tech qq com a 20150513 008211 htm http digi tech qq com a 20150119 009229 htm http tech sina com cn e 2015
  • Fix a Tree【Codeforces 699 D】【dfs + 树的性质】

    Codeforces Round 363 Div 2 D 题意 有N个点 每个点i都有一个父节点p i 如果 i p i 则是说明i结点是根结点 现在我们给出这样的1 N的p i 这可能是不合法的 问 我们应该最少改变多少个使它变成一棵合法
  • kubernetes各组件介绍

    文章目录 一 kubernetes 是什么 1 基础架构图 2 kubernetes 各组件介绍 2 1 master 组件 one Kubernetes API Server kube apiserver two Kubernetes C
  • 位的巧妙应用

    前言 前几天做了一个笔试题目 当时没多想 今天翻看博客才发现 原来每个笔试题都藏的很深啊 原文链接 http blog csdn net u010429424 article details 77856133 先说题目 面试题 8个试剂 其
  • 输入两个学生的学号,成绩,输出成绩较高的学生的学号姓名和成绩

    include
  • 贝叶斯判别分析器_用朴素的贝叶斯构建情感分析器

    贝叶斯判别分析器 Sentiment Analysis is contextual mining of text which identifies and extracts subjective information in the sou
  • 传感器超声波雷达

    转自 http www itsiwei com 21962 html 在上一次分享中 我介绍了毫米波雷达的原理 数据特性及优缺点 毫米波雷达的低环境敏感和低成本的特性使得其在ADAS和自动驾驶领域得到了广泛的应用 今天要介绍的是一款极其常见
  • 【Python】cnocr的使用

    1 介绍 cnocr于2019年7月25日开源 以下是使用介绍 2 安装 pip install cnocr 3 使用 from cnocr import CnOcr ocr CnOcr path r D server cnocr exam
  • 【AI前沿】chatgpt还有哪些不足?

    博客昵称 吴NDIR 个人座右铭 得之淡然 失之坦然 作者简介 喜欢轻音乐 象棋 爱好算法 刷题 其他推荐内容 计算机导论速记思维导图 其他内容推荐 五种排序算法 在这个愉快的周末让我们聊一下ChatGPT吧 ChatGPT 4时代来临 C
  • AD怎么调整PCB板子大小

    方法一 Design Board Shape Redefine Board Shape 快捷键D S R 对于方形 依次画好4个点 然后右键退出操作 没有画成想要的形状之前不要点击右键 方法二 1 在PCB页面用Keep Out Layer
  • C语言学习笔记(七)————分支语句相关

    1 单独一个分号是空语句 在一些情况下有重要作用 2 使用if else语句时 如果条件成立 要执行多条语句 这里要用一对 封装一个代码块 如果if else后面是单条语句则不用大括号括起 3 注意C语言中if else遵循就近原则 不看缩