【C语法学习】while循环语句 您所在的位置:网站首页 c语言程序while语句 【C语法学习】while循环语句

【C语法学习】while循环语句

2024-06-29 11:51| 来源: 网络整理| 查看: 265

文章目录 1 语法结构2 示例2.1 示例12.2 示例22.3 示例32.4 示例42.5 示例5

1 语法结构

while语句的语法结构如下图所示:

while(循环条件表达式) 循环语句;

循环执行流程图: 在这里插入图片描述 循环执行过程:

对表达式求值;如果表达式为假,则退出整个循环;如果表达式为真,则执行循环语句,然后跳到第1步;如果循环语句中有break,则退出整个循环;如果循环语句中有continue,则跳过continue后面的所有语句,然后跳到第1步继续执行。 2 示例 2.1 示例1

希望打印数字1-10,代码如下图所示:

int main() { int i = 1; while (i int i = 1; while (i break; } printf("i = %d\n", i); i++; } return 0; }

代码执行结果如下图所示: 在这里插入图片描述

如果希望跳过打印数字5,在循环语句中加入continue,代码如下图所示:

int main() { int i = 1; while (i continue; } printf("i = %d\n", i); i++; } return 0; }

代码执行结果如下图所示: 在这里插入图片描述 光标一直在闪动,程序无法正常结束。循环中遇到continue,则跳过continue后边的语句,继续对循环条件表达式求值。本例中,i++在continue的后面,当遇到continue时跳过i++语句,导致循环变量i的值无法继续更新,始终等于5,程序进入死循环。

修改上面的代码,挪动i++语句的位置,如下图所示:

int main() { int i = 1; while (i continue; } printf("i = %d\n", i); } return 0; }

代码执行结果如下图所示: 在这里插入图片描述 程序正常结束,跳过打印数字1和5,斗多余打印数字11,不符合预期。

继续修改代码,i++语句位置保持不动,在continue语句前面增加一条i++语句,如下图所示:

int main() { int i = 1; while (i i++; continue; } printf("i = %d\n", i); i++; } return 0; }

代码执行后,跳过打印数字5,符合预期,打印结果如下图所示: 在这里插入图片描述

2.2 示例2

while循环用于清空stdin缓冲区,代码如下图所示:

int main() { char password[20] = { 0 }; // 输入abcde+空格+fgh+空格+回车 printf("请输入密码 : "); scanf("%s", password); //清空stdin缓冲区 int ch = 0; while ((ch = getchar()) != '\n') { ; } // printf("请确认密码(Y/N) : "); int ret = getchar(); if('Y' == ret) { printf("Yes\n"); } else { printf("No\n"); } return 0; }

代码执行结果如下图所示: 在这里插入图片描述 使用scanf(0函数从标准输入流stdin中读取字符时,往往会有残留字符,会导致下次读取stdin时发生错误。所以,在使用scanf()函数之后,需要清空stdin。较新版本的vs开发工具不再支持使用fflush()函数清空stdin的方法,需要用户来实现清空stdin的功能,而while循环语句+getchar()函数的方法可以很好的实现此功能。

2.3 示例3

需求:只打印数字字符,跳过其他字符,代码如下图所示:

int main() { int ch = '\0'; //输入a1+空格+b2+空格+c3+空格+d4+空格+e5+空格+回车 while ((ch = getchar()) != '\n') { if (ch '9') continue; putchar(ch); } printf("\n"); return 0; }

代码执行结果如下图所示: 在这里插入图片描述

2.4 示例4

需求:在一个有序数组中查找某个具体的数字n; 方法:二分法; 实现:代码如下图所示:

int main() { int arr[] = {1,2,3,4,5,6,7,8,9,10}; int k = 0; int sz = sizeof(arr) / sizeof(arr[0]); int l_index = 0; int r_index = 0; int m_index = 0; for (k = 1; k m_index = (l_index + r_index) / 2; if (arr[m_index] r_index = m_index - 1; } else { printf("Number is found, index is %d\n", m_index); break; } } if (l_index > r_index) { printf("Number is not found.\n"); } } return 0; }

代码运行结果如下图所示: 在这里插入图片描述

2.5 示例5

需求:编写代码,演示多个字符从两端移动,向中间汇聚; 实现:代码如下图所示:

int main() { char arr1[] = "welcome to bit!!!!"; char arr2[] = "##################"; int left = 0; int right = strlen(arr1) - 1;//注意字符串结束符'\0'的存在 while (left


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有