分支语句和循环语句下

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

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】

目录
相关文章
|
6月前
|
Go C语言
分支语句与循环语句,详细讲解
分支语句与循环语句,详细讲解
|
7月前
|
算法 Unix 数据安全/隐私保护
分支和循环语句2
分支和循环语句2
62 0
|
6月前
|
数据安全/隐私保护
分支和循环语句(2)
分支和循环语句(2)
35 1
|
6月前
|
C语言
分支和循环语句(3)
分支和循环语句(3)
37 0
分支和循环语句(3)
|
6月前
|
C语言
分支和循环语句(1)
分支和循环语句(1)
48 0
|
7月前
|
缓存 编译器 Go
分支语句和循环语句
分支语句和循环语句
73 0
|
编译器 C语言 C++
分支语句和循环语句上
分支语句和循环语句
61 0
分支语句和循环语句上
|
C语言
分支语句和循环语句(1)
分支语句和循环语句(1)
55 0
|
数据安全/隐私保护 C语言
分支语句与循环语句(2)
分支语句与循环语句(2)
62 0
|
算法 数据安全/隐私保护
分支语句与循环语句——练习
分支语句与循环语句——练习
55 0