C语言 循环结构 —— while循环
while循环
//while 语法结构while (表达式) 循环语句:
表达式结果为真,为非0的时候,循环语句执行,否则循环停止
举例:打印整数1-10
#include<stdio.h>
int main(void)
{ int i = 1; //初始化while (i <= 10) //判断部分{printf("%d\n", i);i++; //循环变量的调整部分}return 0;
}
在while循环中,break 用于永久的终止循环,举例:
#include<stdio.h>
int main(void)
{int i = 1;while (i <= 10){if (i == 5)break;printf("%d ", i); //只会输出:1 2 3 4 ,到5的时候就终止循环了i++;}return 0;
}
把上面的 break 换成 continue 会怎样?
在while循环中,continue是用于终止本次循环的,也就是本次循环中continue后面的代码不会再执行,而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。
#include<stdio.h>
int main(void)
{int i = 1;while (i <= 10){if (i == 5)continue5;printf("%d ", i); //打印:1 2 3 4 之后不执行后面的代码,进入死循环了i++;}return 0;
}
分析下面代码:
getchar():获取一个字符,返回的是int类型,返回的是获取的字符的ASKII码值或者是EOF(-1)
EOF:end of file,文件结束标志
#include<stdio.h>
int main(void)
{int ch = getchar();printf("%c\n", ch); //输入什么字符,则输出什么字符return 0;
}
putchar():输出一个字符
#include<stdio.h>
int main(void)
{int ch = getchar();putchar(ch); //输出一个字符,ch是什么字符,就输出什么字符return 0;
}
思考:1,下面这种while循环现实生活中有什么意义?
#include<stdio.h>
int main(void)
{int ch = 0;//ctrl + z: getchar 读取结束,相当于getchar读到了一个EOFwhile ((ch = getchar()) != EOF){putchar(ch);}return 0;
}
2,下面这个函数会输出什么,为什么?
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(void)
{char password[20] = { 0 };printf("请输入密码:>");scanf("%s", password); //password数组名本来就是个地址,所以前面不用加&printf("请确认密码(Y/N):>");int ch = getchar();if (ch == 'Y'){printf("确认成功\n");}else{printf("确认失败\n");}return 0;
}
输出结果:还没有确认密码,就直接显示确认失败了,为什么?
分析:
getchar scanf 等输入函数,它们是取哪里获取信息的?是从键盘直接拿到的信息吗?
它们是从中间的缓冲区拿去的,它们过来的时候发现缓冲区没有数据,就会等待,从键盘输一些信息进去。如果发现缓冲区有信息了,它们就会拿走。
上面的结果是错的,那怎么解决呢?
当scanf 过来缓冲区把 123456拿走后,getchar过来看到缓冲区有 \n,所以把 \n 拿走了。
如果我们把 \n 清除掉,那缓冲区就没有信息了,getchar就会乖乖第等在这让我们输入Y或者N。
那我们怎么做呢?—— 清理缓冲区
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(void)
{char password[20] = { 0 };printf("请输入密码:>");scanf("%s", password); //此处输入:123456,系统实际是:123456\nprintf("请确认密码(Y/N):>");//清理缓冲区getchar(); //处理'\n', 只是读,没有放到变量里去int ch = getchar(); //这个getchar去缓冲区的时候,缓冲区就没东西了if (ch == 'Y'){printf("确认成功\n");}else{printf("确认失败\n");}return 0;
}
结果:
但是如果上面 scanf("%s", password) 输入的是123456 abc, 结果又会出错,因为scanf只读取空格之前的信息(如果输入的密码本身就需要有空格,可用gets()读取整行),后面的字符一个getchar 读不完,需要很多个getchar,又因为输入的字符个数是随机的,所以不确定要写几个getchar。
这个时候用个while循环就好办了:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(void)
{char password[20] = { 0 };printf("请输入密码:>");scanf("%s", password); printf("请确认密码(Y/N):>");//清理缓冲区中的多个字符int temp = 0;while ((temp = getchar()) != '\n'){;}int ch = getchar();if (ch == 'Y'){printf("确认成功\n");}else{printf("确认失败\n");}return 0;
}
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(void)
{int ch = 0;while ((ch = getchar()) != EOF){if (ch < '0' || ch > '9') // ||:或continue;putchar(ch);}return 0;
}
C语言 循环结构 —— while循环相关推荐
- GO学习笔记 - Go 只有一种循环结构—— for 循环。
一,Go 只有一种循环结构-- for 循环. 官方教程:https://tour.go-zh.org/flowcontrol/1 Go 只有一种循环结构-- for 循环. 基本的 for 循环包含 ...
- 一文熟悉 Go 的循环结构 —— for 循环
哈喽大家好,我是陈明勇,今天分享的知识是 Go 的循环结构.如果本文对你有帮助,不妨点个赞,如果你是 Go 语言初学者,不妨点个关注,一起成长一起进步,如果本文有错误的地方,欢迎指出! 耐心和持久胜过 ...
- Julia循环结构_for循环_2020-04-23
# Julia循环结构_for循环_2020-04-23Thursday #@ for循环是一种迭代循环机制,迭代即重复相同的逻辑操作,每次操作都是基于上一次的结果进行的,而while循环是条件循环. ...
- 循环结构以及循环关键字
循环结构 1. 循环结构特点 任何循环都要求有四个必不可少的条件 1.计数器初始化 2.循环条件 3.循环体 4.计数器变化 2. while循环 while单词:当-- while ( 循环条件 ) ...
- C语言选择结构和循环结构的汇总
C语言中常用的编程结构有三种,它们分别是: 顺序结构:代码从前往后依次执行,没有任何"拐弯抹角",不跳过任何一条语句,所有的语句都会被执行到.选择结构:也叫分支结构.代码会被分成多 ...
- day05循环结构while循环嵌套控制条件语句方法(函数)
循环结构:while循环 语句定义格式: 基本格式: while(判断条件语句){ 循环体语句; ...
- 【MATLAB】流程控制 ( 循环结构 | for 循环 | while 循环 | 分支结构 | if end 分支结构 | if else end 分支结构 | switch case 分支结构 )
文章目录 一.MATLAB 流程控制结构 二.for 循环 1.for 循环 2.嵌套 for 循环 三.while 循环 二.分支结构 1.if end 分支结构 2.if else end 分支结 ...
- python for循环结构_循环结构-for循环
我们在上一节提到过计数控制的循环是根据绝对值的次数来进行循环,我们通过for语句来实现计数循环,那么在for循环中一定存在控制次数的对象. 1. for循环 for循环是通过次数的大小来进行循环,通常 ...
- 循环结构_for循环
循环概述 循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循环将 ...
- Java流程控制03 循环结构 While循环 DoWhile循环 For循环 增强型For循环
1. While循环 while(布尔表达式){//循环内容 } a. 只要布尔表达式为true,循环就会一直执行下去. b. 大多数情况下要让循环停止,徐亚一个让表达式失效的方式来结束循环. c. ...
最新文章
- Centos7创建用户并授予sudo权限
- mysql 主从复制 双主从复制原理 防止主键重复问题(必看)
- 域密码自助重置系统----绑定私人邮箱信息自助重置(一)
- Oracle的 listagg() WITHIN GROUP ()函数使用
- silverlight中如何将string(字符串)写入Resource(资源)?
- [转载] Python京东抢购
- 一起学习C语言:C语言循环结构(一)
- 图像均值滤波简介及实现
- css选择器思维导图
- mysql5建函数报1064错误_Mysql创建表过程中报1064错误
- Java基础IDEA快捷键
- WebApp的自动测试工具: Jenkins
- 打印系统开发(56)——打印机驱动程序设计指南
- TextBox显示提示信息
- C++:使用类方法根据四点计算四面体体积
- 微信公众平台模拟登录 php,微信公众平台模拟登陆问题
- Allegro导出dxf
- 南京艺术学院计算机作曲,南京艺术学院932主科(上机操作计算机作曲应用)考研复习经验...
- ORA-15018: diskgroup cannot be created
- tracert使用与现象排查