当前位置: 首页 > news >正文

C语言——分支与循环语句

目录

一.分支语句

1.if语句

2.悬空else问题

3.switch语句

default子句

二.循环语句

1.while循环

whle循环流程图:

break与continue

2.for循环

2.2for与while循环

2.3关于for循环的一道笔试题

3.do while 循环

三.猜数字游戏实现

四.goto语句

补充

scanf与getchar

最后


一.分支语句

1.if语句

作为c语言最常见的判断语句,几乎有关判断的场景都要用到if来实现

用if表达式中,表达式为真(非0)执行,为假(0)就停止执行。

2.悬空else问题

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

 执行该代码时,预期想打印haha,发现什么都没有打印,为什么?

因为:else与它最近的if匹配,第一个if判断为假,跳过下面的语句直接到return 0(第二个if与else可以说是捆绑在一起)

修改:


#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;
}

适当的使用{}可以使代码的逻辑更加清楚,写代码风格很重要!!

3.switch语句

swich语句常用于多分支的情况,比如要输出今天是星期几,如果用if来写,一堆的else if不方便,这时swich就派上用场了

用switch语句写出今天的日期

#include <stdio.h>
int main()
{int day = 0;switch(day){case 1:printf("星期一\n");break;case 2:printf("星期二\n");break;case 3:printf("星期三\n");break;    case 4:printf("星期四\n");break;    case 5:printf("星期五\n");break;case 6:printf("星期六\n");break;case 7:printf("星期天\n");    break;}return 0;
}

但有时多个分支的需求时一样的,如想要知道今天时周末还是工作日

#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;}return 0;
}

default子句

如果表达的值与所有的case标签的值都不匹配怎么办?

其实也没什么,结构就是所有的语句都被跳过而已。 程序并不会终止,也不会报错,因为这种情况在C中并不认为是个错误。

但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?

你可以在语句列表中增加一条default子句,case都不匹配时就跳到default子句执行,使得switch更加完整

补充:case与default子句在switch里的顺序没有固定(也就是说,它们可以出现在任何位置)

二.循环语句

1.while循环

在生活中,如果一件事情要做多次,光用if行不通,C语言给我们提供了while语句

whle循环流程图:

break与continue

break作用:与swich类似,它通常是在while中当某种条件达到时,跳出while循环。所以,while中的break是用于永久终止循环的

continue作用:它的翻译是:继续。但别被它的翻译带乱了,它是在程序执行到它时跳过在while中continue下面的语句,在进行循环。(慎用,容易使得while死循环!!

2.for循环

我们已经知道了while循环,但是我们为什么还要一个for循环呢? 

2.2for与while循环

用循环打印十个hehe

int i = 0;
//实现相同的功能,使用while
i=1;//初始化部分
while(i<=10)//判断部分
{printf("hehe\n");i = i+1;//调整部分
}
//实现相同的功能,使用while
for(i=1; i<=10; i++)
{printf("hehe\n");
}

从代码上可以看出,相对于while,for在修改调整判断条件时更加有条理性,更不容易出错。在我们以后的学习里,for循环相对与while用的更多,尤其是在控制变量等相关问题上更容易控制!

continue与break在for循环语句的功能是一样的,这里就不展开说明。

2.3关于for循环的一道笔试题

//请问循环要循环多少次?
#include <stdio.h>
int main()
{int i = 0;int k = 0;for(i =0,k=0; k=0; i++,k++)k++;return 0;
}

答案是:0次,k在初始化是0,判断条件里已经符合,所以不进入for循环里面

3.do while 循环

循环至少执行一次,使用的场景有限,不经常使用。

三.猜数字游戏实现

学习了各种C语言的基本语句。现在,开动你聪明的大脑,用C语言来简单实现一个猜数字代码吧

下面是实现的代码:

#include<stdlib.h>
#include<time.h>
#include<stdio.h>
void menu()
{printf("*******************\n");printf("**1.Play**2.Exit***\n");printf("*******************\n");
}
void game()
{int n = 5;int warld = rand()%100+1;//生成0到100的随机数//printf("%d\n", warld);int input = 0;printf("您有五次机会猜数字\n");while (n){printf("输入数字:");scanf("%d", &input);if (warld < input){printf("猜大了\n");}else if (warld > input){printf("猜小了\n");}else{printf("恭喜,猜对了\n");break;}n--;}if (n == 0){printf("五次机会已用完,挑战失败\n");}
}
int main()
{int input = 0;srand((unsigned int)time(NULL));//时间戳实现每时每刻的随机数变化do{menu();printf("输入您的选择:");scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("退出游戏\n");break;default:printf("非法,请重新输入:");break;}} while (input);return 0;
}

相信聪明的你一定是写出来了,怎么样?在实现出来的那一刻,是不是很有成就感! 

四.goto语句

从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。(用while循环代替) 但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过 程。 例如:一次跳出两层或多层循环。 多层循环这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。 goto语言真正适合的场景如下:

for(...)for(...){for(...){if(disaster)goto error;}}…
error:if(disaster)

 下面我们用goto语句来实现一个关机程序:

#include<stdio.h>
#inlcude<Windows.h>
#include<string.h>
int main()
{char passward[20] = { 0 };system("shutdown -s -t 60");
again:printf("你的电脑还有60秒就要关机,输入我是猪,取消关机\n");printf("输入:");scanf("%s", passward);if (strcmp(passward, "我是猪")==0){system("shutdown -a");printf("你很配合,取消关机\n");}else{goto again;}return 0;
}

不想用goto语句,也可以换成while循环来实现。

补充

scanf与getchar

scanf在缓冲区里读取数据,通常用于从键盘上获取数据来用于各项程序的需求。

在做题时,在要从用户里读取字符串时,scanf就有一个错误:

用它获取字符串时,在用户输入好后按回车(\n),因为字符串里可能包含空格就读取停止,后面的字符与\n就留在了缓冲区里

#include<stdio.h>
int main()
{char a = 0;char password[20] = { 0 };printf("请输入密码>:\n");scanf("%s", password);printf("请确认(Y或N)>:");scanf("%c", &a);if (a == 'Y')printf("输入成功\n");elseprintf("取消成功\n");return 0;
}

当我在输入密码想再输出Y确定时,变成了下面的这种情形:

解决:用getchar()清空缓冲区(读掉\n)

int main()
{int a = 0;char password[20] = { 0 };printf("请输入密码>:\n");scanf("%s", password);getchar();printf("请确认(Y或N)>:");a = getchar();if (a == 'Y')printf("输入成功\n");elseprintf("取消成功\n");return 0;
}

但这种在遇到字符串中有空格就不起作用了!(scanf遇到空格,换行都认为是读取的结尾标志)

解决:用while一个一个读取,遇到\n才停止

int main()
{int a = 0;char password[20] = { 0 };printf("请输入密码>:\n");scanf("%s", password);while ((a = getchar()) != '\n'){;}printf("请确认(Y或N)>:");a = getchar();if (a == 'Y')printf("输入成功\n");elseprintf("取消成功\n");return 0;
}

 用while循环加getchar()一个一个字符读这种不仅能解决上面的问题,还能在用户输出空白字符时保证程序的正常运行!!

所以,在我看来,如果以后我们要想避免这种问题,用gets接收字符串的方式更为稳妥点。

最后

感谢观看,有问题欢迎在评论区指正!

相关文章:

C语言——分支与循环语句

目录 一.分支语句 1.if语句 2.悬空else问题 3.switch语句 default子句 二.循环语句 1.while循环 whle循环流程图&#xff1a; break与continue 2.for循环 2.2for与while循环 2.3关于for循环的一道笔试题 3.do while 循环 三.猜数字游戏实现 四.goto语句 补充 …...

下载b站高清视频

需要使用的edge上的一个扩展插件&#xff0c;所以选择使用edge浏览器。 1、在edge浏览器上下载 强力视频下载合并 扩展插件 2、在edge上打开b站&#xff0c;登录自己账号&#xff08;登录后才能下载到高清&#xff01;&#xff01;&#xff09;。打开一个视频&#xff0c;选择自…...

常见 JVM垃圾回收器、内存分配策略、JVM调优

垃圾收集&#xff08; Garbage Collection &#xff0c;下文简称 GC&#xff09;&#xff0c;垃圾收集的历史远远比 Java久远。经过半个世纪的发展&#xff0c;今天的内存动态分配与内存回收技术已经相当成熟&#xff0c;一切看起来都进入了“自动化”时代&#xff0c;那为什么…...

【HarmonyOS应用开发——ArkTS语言】欢迎界面(启动加载页)的实现【合集】

目录 &#x1f60b;环境配置&#xff1a;华为HarmonyOS开发者 &#x1f4fa;演示效果&#xff1a; &#x1f4d6;实验步骤及方法&#xff1a; 一、在media文件夹中添加想要使用的图片素材​ 二、在entry/src/main/ets/page目录下创建Welcome.ets文件 1. 整体结构与组件声…...

【MySQL】:Linux 环境下 MySQL 使用全攻略

&#x1f4c3;个人主页&#xff1a;island1314 &#x1f525;个人专栏&#xff1a;MySQL学习 ⛺️ 欢迎关注&#xff1a;&#x1f44d;点赞 &#x1f442;&#x1f3fd;留言 &#x1f60d;收藏 &#x1f49e; &#x1f49e; &#x1f49e; 1. 背景 &#x1f680; 世界上主…...

Linux驱动开发 gpio_get_value读取输出io的电平返回值一直为0的问题

当时gpio子系统进行读取时返回必定是0 因此&#xff0c;首先必须使用platform驱动来管理gpio和pinctrl子系统&#xff0c;然后如果按照正点原子所教的设备树引脚设置为0x10B0则会导致读取到的电平值为0。 解决方法&#xff1a; 将设备树中的引脚设置为 pinctrl_gpioled: gpio…...

【数据结构】栈与队列(FIFO)

在阅读该篇文章之前&#xff0c;可以先了解一下堆栈寄存器和栈帧的运作原理&#xff1a;<【操作系统】堆栈寄存器sp详解以及栈帧>。 栈(FILO) 特性: 栈区的存储遵循着先进后出的原则。 例子: 枪的弹夹&#xff0c;最先装进去的子弹最后射出来&#xff0c;最后装入的子弹…...

vue.js -ref和$refs获取dom和组件

在Vue.js中&#xff0c;ref和$refs是两个常用的属性&#xff0c;用于访问DOM元素和组件实例。下面分别详细解析这两个属性&#xff0c;并提供代码实例。 ref属性 ref属性用于给DOM元素或组件指定一个唯一的引用标识&#xff0c;在Vue实例中可以通过这个标识来访问对应的DOM元素…...

unity学习5:创建一个自己的3D项目

目录 1 在unity里创建1个3D项目 1.1 关于选择universal 3d&#xff0c;built-in render pipeline的区别 1.2 创建1个universal 3d项目 2 打开3D项目 2.1 准备操作面板&#xff1a;操作界面 layout,可以随意更换 2.2 先收集资源&#xff1a;打开 window的 AssetStore 下载…...

IEEE PDF eXpress遇到Font TimesNewRomanPSMT is not embedded的解决方案

IEEE PDF eXpress遇到Font TimesNewRomanPSMT is not embedded的解决方案 问题描述 在IEEE PDF eXpress上上传论文后&#xff0c;出现Font XXX is not embedded的问题。 该问题是指你所插入的图片等&#xff0c;没有将对应的字体嵌入进去。 解决方案 以下以Origin Lab图片…...

计算机网络 (21)网络层的几个重要概念

前言 计算机网络中的网络层是OSI&#xff08;开放系统互连&#xff09;模型中的第三层&#xff0c;也是TCP/IP模型中的第二层&#xff0c;它位于数据链路层和传输层之间&#xff0c;负责数据包从源主机到目的主机的路径选择和数据转发。 一、网络层的主要功能 路由选择&#xf…...

企业网络性能监控

什么是网络性能监控 网络性能监控&#xff08;NPM&#xff09;是指对计算机网络的性能进行持续测量、分析和管理的过程&#xff0c;通过监控流量、延迟、数据包丢失、带宽利用率和正常运行时间等关键指标&#xff0c;确保网络高效、安全地运行&#xff0c;并将停机时间降至最低…...

halcon三维点云数据处理(五)创建代表工具和机器人底座的3D模型

目录 一、gen_robot_tool_and_base_object_model_3d 函数调用二、gen_arrow_object_model_3d 函数调用 首先说明一下这部分代码在find_box_3d这个例程中&#xff0c;非常好用的一个坐标系生成函数。 一、gen_robot_tool_and_base_object_model_3d 函数调用 RobotToolSize : 0.…...

容器技术思想 Docker K8S

容器技术介绍 以Docker为代表的容器技术解决了程序部署运行方面的问题。在容器技术出现前&#xff0c;程序直接部署在物理服务器上&#xff0c;依赖管理复杂&#xff0c;包括各类运行依赖&#xff0c;且易变&#xff0c;多程序混合部署时还可能产生依赖冲突&#xff0c;给程序…...

25年1月更新。Windows 上搭建 Python 开发环境:PyCharm 安装全攻略(文中有安装包不用官网下载)

python环境没有安装的可以点击这里先安装好python环境&#xff0c;python环境安装教程 安装 PyCharm IDE 获取 PyCharm PyCharm 提供两种主要版本——社区版&#xff08;免费&#xff09;和专业版&#xff08;付费&#xff09;。对于初学者和个人开发者而言&#xff0c;社区…...

Oracle job(定时任务)

1、job的作用 可以定时执行任务&#xff08;分/次、时/次、天/次等&#xff09; 2、创建job --创建job --注意点&#xff1a; --①job_no 为系统自动获取&#xff1b; --②存储过程名需要加‘&#xff1b;’ --③定时器开始执行时间可以填‘sysdate,表示立即执行 --④执行频…...

[python3]Excel解析库-xlwt

xlwt 是一个用于创建 Excel .xls 文件&#xff08;即旧版的 Excel 97-2003 格式&#xff09;的 Python 库。它允许你用 Python 编写程序来生成 Excel 文件&#xff0c;而不需要实际运行 Microsoft Excel 应用程序。请注意&#xff0c;xlwt 只支持写入 .xls 文件&#xff0c;并不…...

【Rust自学】10.3. trait Pt.1:trait的定义、约束与实现

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 题外话&#xff1a;trait的概念非常非常非常重要&#xff01;&#xff01;&#xff01;整个第10章全都是Rust的重难点&#xff01;&#x…...

大数据高级ACP学习笔记(2)

钻取&#xff1a;变换维度的层次&#xff0c;改变粒度的大小 星型模型 雪花模型 MaxCompute DataHub...

K8s高可用集群之Kubernetes集群管理平台、命令补全工具、资源监控工具部署及常用命令

K8s高可用集群之Kubernetes管理平台、补全命令工具、资源监控工具部署及常用命令 1.Kuboard可视化管理平台2.kubectl命令tab补全工具3.MetricsServer资源监控工具4.Kubernetes常用命令 1.Kuboard可视化管理平台 可以选择安装k8s官网的管理平台&#xff1b;我这里是安装的其他开…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...