手写C语言之分支循环语句-语法详细版(09)

简介: 手写C语言之分支循环语句-语法详细版

switch-default

如果表达的值与所有的case标签的值都不匹配怎么办?其实也没什么,结构就是所有的语句都被跳过而已。程序并不会终止,也不会报错,因为这种情况在C中并不认为是个错误。但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?


你可以在语句列表中增加一条default子句,把下面的标签:default:写在任何一个 case 标签可以出现的位置。

当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。

所以,每个switch语句中只能出现一条default子句。


但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。


任意位置,而且只能出现一次!


image.png


#include <stdio.h>
int main()
{
  int n = 1;
  int m = 2;
  switch (n)
  {
  case 1:
  m++; // m:3
  case 2:
  n++; // n:2
  case 3:
  switch (n)
  {//switch允许嵌套使用
  case 1:
    n++; //这里不会执行!因为条件是1,但是n是2
  case 2:
    m++; //m:4
    n++;//n:2
    break;
  }
  case 4:
  m++;//m:5
  break;
  default:
  break;
  }
  printf("m = %d, n = %d\n", m, n);
  return 0;
}




image.png



为什么是这个结果,大家一定要明白这个执行逻辑顺序,这里强调的是:break是跳出,如果没有写就会一次执行,但是前提是必须要满足这个条件(和变量有一一对应),且依次执行后面的语句。

这样对应上面的代码就可以完全可以看懂了!


switch也是选择题里面经常会考察的一个点,如果你觉得它难,那一定是没有理解到精髓,建议多看和多测试!


循环语句

while循环

当条件满足的情况下,if语句后的语句执行,否则不执行。但是这个语句只会执行一次。由于我们发现生活中很多的实际的例子是:同一件事情我们需要完成很多次。那我们怎么做呢?


C语言中给我们引入了: while 语句,可以实现循环。

//while 语法结构
while(表达式)
循环语句;

表达式成立:1,不成立:0


image.png


死循环演示


#include <stdio.h>
int main()
{
  int i = 0;
  while (1) {
  i++;
  printf("正在执行第%d次任务!",i);
  }
  return 0;
}




image.png

在写代码的过程中,我们需要避免死循环的产生!


break与continue

在循环中,我们经常需要使用这两个关键词关键词进行跳出循环,最终达到我们所需的要求的!


其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。

所以:while中的break是用于永久终止循环的。


我们在写代码的过程中,一定要学会自己分析算法,一般的考试和面试重点在于如何使用代码完成这个算法功能效果


九九乘法表(while)

比如,我们可以利用while循环自己写一个九九乘法表:


#include <stdio.h>
int main()
{
  int i = 0;
  while (i < 9) {
  i++;
  int j = 0;
  while (j < i) {
    j++;
    printf("%d*%d=%d\t", i, j, i * j);
  }
  printf("\n");
  }
  return 0;
}



image.png


那么有的同学就会疑问,如果是嵌套循环的话,break是怎么个规则法呢?

它的规则是,跳出本次循环,而不是全部循环!


#include <stdio.h>
int main() {
  int  i = 0;
  while (i < 5) {
  printf("%d", i);
  while (i < 5) {
    if (i == 0) {
    break;
    }
  }
  }
  return 0;
}




其次:continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,

而是直接跳转到while语句的判断部分。进行下一次循环的入口判断


#include <stdio.h>
int main()
{
  int ch = 0;
  while ((ch = getchar()) != EOF)
  putchar(ch);
  return 0;
}


这个代码是什么意思呢?

首先getchar()是读取字符,但是它会把\0也读进去,也就是说,我们输入一个字符,一般不是一个字符,它还有一个反斜杠0


image.png


这里EOF是文件读取错误的一种显示!那么如果,我们需要达到回车之后,不进入下一行又该怎么去实现呢?


#include <stdio.h>
int main()
{
char ch = '\0';
while ((ch = getchar()) != EOF)
{
if (ch < ‘0’ || ch > ‘9’)
continue;
putchar(ch);
}
return 0;
}



这个代码的作用是:只打印数字字符,跳过其他字符的,具有清空缓冲区的作用!


密码区缓冲代码

那么在日常的生活中我们有什么具体的案例?

假设,目前需要你写一个密码验证程序,用户输入密码进行确认,然后进行判断密码是否正确!


#include <stdio.h>
int main() {
  char passwoed[15] = { 0 };
  printf("请设置你的密码():");
  scanf("%s", &passwoed);//读取密码,但是在终端我们会回车
  //清空缓冲区,将\n清空,因为scanf只会接收password这个里面的东西
  getchar();
  printf("输入Y确认:");
  getchar();//清空缓冲区
  char result = getchar();
  if (result = 'Y') {
  printf("确认成功!");
  }
  else {
  printf("确认失败!");
  }
  return 0;
}



image.png


简单的来说就是,getchar()可以用来清空缓冲区,这样就避免bug的出现!

这样看来,C语言果然适合做一些系统和软件的设计,在python语言中,我们都不用担心这些东西!


但是真的这个程序就是没有bug的吗?我们如果请专业的测试人员,可能一测试!


image.png

当我们的密码里面出现空白格之后,也是不可以的,同时当我们输入过快的时候,没有输入Y而是输入的回车那么他也确认成功?


image.png



原来是,之前这个等号没有写出双等号!第一个bug解决了,那么我们继续解决第二个!



#include <stdio.h>
int main() {
  char passwoed[15] = { 0 };
  printf("请设置你的密码():");
  scanf("%s", &passwoed);//读取密码,但是在终端我们会回车
  //清空缓冲区,将\n清空,因为scanf只会接收password这个里面的东西
  getchar();
  printf("输入Y确认:");
  //getchar();//清空缓冲区
  int temp = 0;
  while ((temp = getchar()) != '\n') {
  ;
  }
  char result = getchar();
  if (result == 'Y') {
  printf("确认成功!");
  }
  else {
  printf("确认失败!");
  }
  return 0;
}


image.png




每文一语

日积月累才是最好的前进!


相关文章
|
2月前
|
C语言
初识C语言2——分支语句和循环语句
初识C语言2——分支语句和循环语句
78 5
|
2月前
|
C语言
【c语言】分支语句
C语言通过三种基本结构——顺序、选择和循环,构建复杂的程序逻辑。本文主要介绍了C语言的选择结构,即if-else语句及其变体,包括简单的if语句、if-else组合、else if多分支判断、嵌套if以及解决悬空else问题的方法。此外,还详细讲解了逻辑运算符和关系运算符的使用,以及如何利用条件操作符简化逻辑判断。最后,文章对比了if-else与switch语句在实现多分支逻辑时的应用,并解释了switch语句中的break和default关键字的作用。
34 8
|
2月前
|
C语言
【c语言】循环语句
循环结构是C语言中用于简化重复操作的重要工具,主要包括while循环、do-while循环和for循环。while循环是最基本的形式,通过不断检查条件来决定是否继续执行循环体。do-while循环则先执行循环体,再检查条件,至少执行一次。for循环逻辑更复杂,但使用频率最高,适合初始化、条件判断和更新变量的集中管理。此外,循环中还可以使用break和continue语句来控制循环的提前终止或跳过当前迭代。最后,循环可以嵌套使用,解决更复杂的问题,如查找特定范围内的素数。
48 6
|
2月前
|
Serverless C语言
C语言控制语句:分支、循环和转向
C语言控制语句:分支、循环和转向
|
2月前
|
C语言
教你快速理解学习C语言的循环与分支
教你快速理解学习C语言的循环与分支
19 0
|
2月前
|
小程序 C语言
初识C语言:走近循环
初识C语言:走近循环
|
IDE 定位技术 开发工具
C语言 第四章 关系、逻辑运算与分支流程控制
一、关系运算 若干表达式用关系运算符连接而成,就构成关系表达式。 关系表达式中,表达式成立,其值为1(真);表达式不成立,其值为0(假)。其他表达式中,其结果如果是非0则为真,结果为0则为假。 关系运算符的优先级低于算术运算符,高于赋值运算符。
1047 0
|
19天前
|
存储 C语言 开发者
【C语言】字符串操作函数详解
这些字符串操作函数在C语言中提供了强大的功能,帮助开发者有效地处理字符串数据。通过对每个函数的详细讲解、示例代码和表格说明,可以更好地理解如何使用这些函数进行各种字符串操作。如果在实际编程中遇到特定的字符串处理需求,可以参考这些函数和示例,灵活运用。
39 10
|
19天前
|
存储 程序员 C语言
【C语言】文件操作函数详解
C语言提供了一组标准库函数来处理文件操作,这些函数定义在 `<stdio.h>` 头文件中。文件操作包括文件的打开、读写、关闭以及文件属性的查询等。以下是常用文件操作函数的详细讲解,包括函数原型、参数说明、返回值说明、示例代码和表格汇总。
42 9
|
19天前
|
存储 Unix Serverless
【C语言】常用函数汇总表
本文总结了C语言中常用的函数,涵盖输入/输出、字符串操作、内存管理、数学运算、时间处理、文件操作及布尔类型等多个方面。每类函数均以表格形式列出其功能和使用示例,便于快速查阅和学习。通过综合示例代码,展示了这些函数的实际应用,帮助读者更好地理解和掌握C语言的基本功能和标准库函数的使用方法。感谢阅读,希望对你有所帮助!
31 8