分支语句和循环语句下

简介: 分支语句和循环语句

getchar和putchar

这里我们来介绍一下getchar和putchar。

getchar()作用是是获取(输入)一个字符。函数不接受任何的参数。——scanf

getchar读取字符成功的时候,返回字符的ASCLL码值。

            读取失败或者遇到文件末尾的时候就返回EOF(-1)


putchar()作用是输出一个字符。——printf

使用1

//windows环境按ctrl+z  getchar返回EOF
#include <stdio.h>
int main()
{
  int ch = 0;
  while ((ch = getchar()) != EOF)
  {
    if (ch < '0' || ch > '9')
      continue;
    putchar(ch);
    //打印0~9的字符
  }
  return 0;
}

放张图方便以后复习🙂绝望了,怎么还没写完,反正也没人看!好烦,我爱写代码!

使用2

解析来我们用一个例子来循序渐进的讲解。🆒

关于下面这段代码为什么会出现读取失败的原因呢???


解释如下🙂🙂🙂

#include<stdio.h>
int main()
{
  char password[20];
  printf("请输入密码:");
  scanf("%s", password);//数组名本来就是地址不用取地址
//第一次scanf读取了缓存区的xgdtaq  留下了\n(回车)再缓存区。
  printf("请确认密码(Y/N):");
  char ch=getchar();//getchar只能读取一个字符
//当getchar读取字符的时候正好看到\n(回车算一个字符)就读取成功了
  if (ch == 'Y')
    printf("确认成功");
  else
    printf("确认失败");
//getchar读取到的\n≠"Y"就输出确认失败
  return 0;
}

此刻,我们需要再getchar读到\n时清空缓存区。所以我们需要在前面加入一个getchar。

但是如果我们想选用空格当作密码之一呢?

依然说确认失败,为什么呢?

因为scanf函数遇到空格就不在读取了,那我们可以在多加几个getchar就解决问题了,可是我们如果不知道输入的人想要在空格后输入多少位字符,所以这里我们又要用到我们的循环!!!

#include<stdio.h>
int main()
{
  char password[20];
  printf("请输入密码:");
  scanf("%s", password);//数组名本来就是地址不用取地址
  while (getchar()  != '\n');//循环条件  //增加一个循环,直到getchar读到\n,清空缓存区
  {
    ;   //表示这里有一条语句,需要这条空语句,什么都不干。
  }
  printf("请确认密码(Y/N):");
  char ch=getchar();//getchar只能读取一个字符
  if (ch == 'Y')
    printf("确认成功");
  else
    printf("确认失败");
  return 0;
}

以上代码就实现了清空缓存区。

for循环

语法结构

//for循环的语法结构

//for循环的语法优于while且用的很多

//循环安顺序需注意

for(表达式1;表达式2;表达式3)

      循环语句;

使用for循环 在屏幕上打印1 - 10的数字
#include<stdio.h>
int main()
{
  int i = 0;
  while (i < 10)
  {
    i++;
    printf("%d ", i);
  }
  return 0;
}
//第一种
#include<stdio.h>
int main()
{
  int i = 1;
  while (i <= 10)
  {
    printf("%d ", i);
    i++;
  }
  return 0;
}
//第二种
#include<stdio.h>
int main()
{
  int i = 0;
  for (i = 1; i <= 10; i++)
    printf("%d ", i);
  return 0;
}
//第三种
//特点:初始化只执行一次

for循环中的break

//break在for循环中也是终止循环的作用
//while和for循环中break作用一样,只要遇到break都是终止循环。
#include<stdio.h>
int main()
{
  int i = 0;
  for (i = 1; i <= 10; i++)
  {
    if (i == 5)
      break;
    printf("%d ", i);
  }
  return 0;
}

for循环中的continue

//在for循环中的continue,直接跳过continue后面的代码,来到for循环中的调整部分
//和while循环中的continue有区别
#include<stdio.h>
int main()
{
  int i = 0;
  for (i = 1; i <= 10; i++)
  {
    if (i == 5)
      continue;
    printf("%d ", i);
  }
  return 0;
}

建议

1.我们在for循环体内部尽量不修改循环变量。 如果我们在循环体内部去修改循环变量,很可能导致得 不到想要的结果,从而导致死循环。

人会有以下写法,虽然它很简便,但是它有弊端。所定义的变量出了循环体就不能使用了。

#include<stdio.h>
int main()
{
  //C99时引出的写法
  for ( int i = 1; i <= 10; i++)
  {
    printf("%d ", i);
  }
  //弊端就是i只能在循环体内部使用
  //出了循环体就不能使用了
  return 0;
}

2.我们建议for循环的循环体采用"前闭后开区间"的写法。来看看对比,那个更容易理解?

//建议2.在for循环中尽量采用“左闭右开”的方法
//用数组和for循环打印1~10的数字
//左闭右开
#include<stdio.h>
int main()
{
  int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
  int i = 0;
  for (i = 0; i < 10; i++)//数组下标从0~9   //【0,10)
    printf("%d ", arr[i]);//打印下标即可
  return 0;
}
//全闭
#include<stdio.h>
int main()
{
  int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
  int i = 0;
  for (i = 0; i <= 9; i++)  //【0,10】
    printf("%d ", arr[i]);
  return 0;
}

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次,看清楚for循环中判断条件是k=0,是赋值不是判断,意为把0赋值给k,表达式为假不进入循环

do while循环

语法结构

do


   循环语句;              //循环语句若为一条可不要{},反之有多条,必须加上{}


while(表达式);      //表达式为真继续循环,为假跳出循环


                                  //注意不要遗漏了后面的的分号


语法特点

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

#include<stdio.h>
int main()
{
  int a = 0;
  do
  {
    a++;
    printf("%d ", a);
  } while (a < 10);
  return 0;
}
//循环至少执行一次,使用的场景有限,所以不是经常使用

do while循环中的break

break: 终止循环的作用。

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

do while循环中的continue

continue:终止本次循环。跳过本次循环后面的代码,直接去判断部分。

#include<stdio.h>
int main()
{
  int a = 1;
  do
  {
    if (a == 5)
      continue;
      printf("%d ", a);
      a++;
  } while (a < 10);
  return 0;
}

go to语句

关于goto语句我们介绍三个点。

用法

跳转到前面:

#include<stdio.h>
int main()
{
  printf("1111 ");
  printf("2222 ");
flag:
  printf("3333 ");
  goto flag;
  printf("4444 ");
  printf("5555 ");
  printf("6666 ");
  return 0;
}

跳转到后面:

#include<stdio.h>
int main()
{
  printf("1111 ");
  printf("2222 ");
  printf("3333 ");
  goto flag;
  printf("4444 ");
  printf("5555 ");
flag:
  printf("6666 ");
  return 0;
}

适用

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

【在下面一篇文章中我们将继续介绍goto使用在一个关机程序上,可以先动手写写。】

提醒

NO1-----以上所有无论分支和循环语句,都只能控制一条语句,所以在写一条及多条语句的时候一定要加上{  }


NO2-----关于break和continue,请一定仔细判断,看好边界条件,才能得出正确答案✔✔✔


NO3-----关于==和=,等于和赋值我们一定要判断清楚,才不会把程序搞错。🙂🙂


✔✔✔✔✔最后,感谢大家的阅读,欢迎大家指针不足和错误!!🙂🙂🙂🙂

代码------→【gitee:https://gitee.com/TSQXG/c.start

联系------→【邮箱:2784139418@qq.com】

目录
相关文章
|
存储 自然语言处理 IDE
通义灵码初识
讲述什么是通义灵码、适用环境、基本操作
|
移动开发
RN开发快速切换底部导航时react-native-swiper轮播图组件白屏
RN开发快速切换底部导航时react-native-swiper轮播图组件白屏
515 0
RN开发快速切换底部导航时react-native-swiper轮播图组件白屏
|
供应链 搜索推荐 前端开发
计算机专业毕业论文设计与实现(论文+源码)_kaic
计算机专业毕业论文设计与实现(论文+源码)_kaic
|
SDN 数据中心 网络架构
【计算巢】软件定义网络(SDN):网络管理的未来趋势
【5月更文挑战第31天】SDN(Software Defined Networking)是新兴的网络架构模式,通过分离控制平面和数据平面实现集中化管理,提高网络可见性和可控性。它以软件定义为核心,打破传统硬件限制,促进网络创新。SDN 提供快速部署、降低成本并增强灵活性。示例代码展示了使用 Python 实现的简单 SDN 控制器。随着技术发展,SDN 在数据中心和电信网络等领域广泛应用,引领网络技术的未来。
276 0
|
9月前
|
机器学习/深度学习 人工智能 自然语言处理
Genesis:卡内基梅隆大学联合 20 多所研究机构开源生成式物理引擎,能够模拟各种材料、物体和物理运动现象
Genesis是由卡内基梅隆大学联合20多所研究机构开源的生成式物理引擎,能够模拟世界万物,具有高度的物理准确性和快速的模拟速度,适用于机器人仿真、游戏开发、电影特效制作等多个领域。
416 21
Genesis:卡内基梅隆大学联合 20 多所研究机构开源生成式物理引擎,能够模拟各种材料、物体和物理运动现象
|
文字识别 算法 API
视觉智能开放平台产品使用合集之uniapp框架如何使用阿里云金融级人脸识别
视觉智能开放平台是指提供一系列基于视觉识别技术的API和服务的平台,这些服务通常包括图像识别、人脸识别、物体检测、文字识别、场景理解等。企业或开发者可以通过调用这些API,快速将视觉智能功能集成到自己的应用或服务中,而无需从零开始研发相关算法和技术。以下是一些常见的视觉智能开放平台产品及其应用场景的概览。
300 0
|
10月前
|
监控 搜索推荐 API
亚马逊商品API接口:运用及收益
作为全球最大的电商平台之一,亚马逊不仅提供了丰富的商品选择,还通过其开放平台为开发者提供了多种API接口,特别是商品详情API接口。本文将深入探讨该接口的运用及其带来的商业机会和收益,包括提高用户体验、降低运营成本、增强市场竞争力和创新业务模式等方面。
231 7
栈的几个经典应用,真的绝了
文章总结了栈的几个经典应用场景,包括使用两个栈来实现队列的功能以及利用栈进行对称匹配,并通过LeetCode上的题目示例展示了栈在实际问题中的应用。
栈的几个经典应用,真的绝了
|
开发框架 自然语言处理 前端开发
Fastadmin:乘时代热点之风,以 thinkphp 与 bootstrap 融合之力,开启高效后台开发新征程
【8月更文挑战第22天】在互联网飞速发展的今天,Fastadmin作为一款基于ThinkPHP与Bootstrap的高效后台开发框架,为开发者带来了前所未有的便捷。它融合两者优势,不仅利用ThinkPHP快速构建稳定Web应用,还借助Bootstrap实现美观的响应式界面设计。Fastadmin内置丰富的功能模块与插件,如权限管理、数据表格等,大幅提高开发效率。同时支持多语言,便于国际化应用开发。其清晰的代码结构易于扩展与维护,无论是小项目还是大型应用,都能助力开发者快速构建高质量后台系统。
303 2
|
JavaScript
Vue 3:检验手机号码的逻辑
Vue 3:检验手机号码的逻辑