评论

收藏

[C++] c语言_Day11-07-10

编程语言 编程语言 发布于:2021-07-11 10:19 | 阅读数:466 | 评论:0

c语言_Day11-07-10

1、循环语句

  1、while循环

  while循环可理解为执行多次的if语句:
  if语句对条件表达式进行判断,若为真则执行选择体1次,if语句结束
  while语句对条件表达式进行判断,若为真则执行代码块,代码块语句执行结束后重新回到判断,直到条件表达式为假跳出while语句,否则一直循环,故可理解while语句为执行多次的if语句。
int main()
{
  int i = 1;
  while (i <= 10)
  {
    printf("%d ", i++);
  }
  return 0;
}
  补:break**和**continue
  break:跳出循环体(终止循环)
  continue:跳过本次循环,继续进行下一次判断
int main()
{
  
  while (1)
  {
    static int i = 0;
    i++;
    if (i % 2 == 1)
    {
      continue;
    }
    
    printf("%d\n", i);
    
    if (i >= 100)
    {
      break;
    }
  }
  return 0;
}
  常见错误代码:
int i = 0;
while (i <= 10)
{
  if(i == 5)
       continue;
  printf("%d\n", i++);
}
  该代码会进入死循环,因为当i自增至5时进入if语句执行continue,自增操作被跳过,导致一直无法自增以跳出循环体
  补:getchar**和**putchar
  getchar和putchar为c语言的库函数:

  • getchar用于接收键盘输入的字符并返回其所对应ASCII码值


  • putchar用于接收ASCII码值并转化为字符输出,本质同printf("%c", ch);
int main()
{
  int ch = getchar();
  putchar(ch);
  printf("\n%c\n", ch);
  printf("%d\n", ch);
  return 0;
}
  常见错误代码:
int main()
{
  char psd[20] = { 0 };
  printf("请输入密码:");
  scanf("%s", psd);
  printf("\n请确认(Y/N):");
  int confirm = getchar();
  if (confirm == 'Y' || confirm == 'y')
  {
    printf("确认成功\n");
  }
  else
  {
    printf("放弃确认\n");
  }
  return 0;
}
  程序运行后,getchar不会暂停程序以等待用户输入信息。经调试发现,confirm被赋值为10,即“\n”。
  其原因为,在输入密码时最后输入的回车键被getchar所读取导致
输入函数原理:类似于scanf、getchar等函数为输入函数,其原理为:  ​    输入函数执行前,先查看其输入缓冲区,若输入缓冲区无数据,则等待用户输入;用户输入完毕后,将输入字符存入输入缓冲区
  ​    对于scanf函数,其特点为仅获取空格**前的字符并赋值,故输入缓冲区内仍存在**\n,而getchar可直接获取\n而无需等待用户输入
解决方案:在getchar读取用户输入前,再添加一个getchar函数以读走'\n'。若需清空输入缓存区,可利用循环。
while (getchar() != '\n') {}
2、for循环
  相对于while循环,for循环的整个循环体高度集中化(变量初始化、循环判断、变量调整集中控制),可提升代码的可读性
for(变量初始化;循环判断;变量调整)
{
  语句...
}
  注:当使用for循环时可有效避免continue造成的死循环,因为continue后代码仍会执行变量调整
int main()
{
  for (int i = 1; i <= 10; i++)
  {
    if (i == 5)
    {
      continue;
    }
    printf("%d\n", i);
  }
  return 0;
}
  常见错误(不规范)代码:
for (int i = 0; i < 10; i++)
{
  printf("HAHA\n");
  if (i = 5)
  {
    printf("HEHE\n");
  }
}
  程序死循环,尽量避免在for循环体内改变循环变量
int i = 0;
int j = 0;
for (; i < 10; i++)
{
  for (; j < 10; j++)
  {
    printf("Hello\n");
  }
}
  打印10次,因为当i=1时j=10并且不刷新,故无法进入内层for循环
  for循环变种:

  • 死循环
for(;;){}

  • 多变量循环
int main()
{
  for (int x = 0, y = 0; x < 2 && y < 5; x++, y++)
  {
    printf("hello\n");
  }
  return 0;
}
  面试题:
int main()
{
  int count = 0;
  for (int i = 0, k = 0; k = 0; i++)
  {
    k++;
    count++;
  }
  printf("%d\n", count);
  return 0;
}
  不进入循环。因为条件判断部分k被赋值为0(假),条件不满足跳出循环
3、do...while循环
  类似于while循环,但先进行循环再判断,故循环体必执行1次
int main()
{
  int i = 0;
  do
  {
    printf("%d\n", ++i);
  }
  while (i < 10);
  return 0;
}
关注下面的标签,发现更多相似文章