C语言示例讲解while循环语句的用法

目录
  • 1、while语句结构
  • 2、代码示例

在学习和回顾该知识前,已经掌握了if语句的结构和用法。

if (条件)
    语句;

当条件满足的情况下,if结构中的语句执行,且只执行一次;条件不满足则不执行。但是生活中常常需要将一件事情完成很多次,这时候就要用到while语句来实现循环了。

1、while语句结构

while (表达式)
    循环语句;

例子:利用循环结构打印1-10

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

1 2 3 4 5 6 7 8 9 10

来测试一下在代码中分别加入continue和break是什么结果

在while循环中,break用于永久地终止循环

int main()
{
	int i = 1; //初始化
	while (i <= 10) //判断部分
	{
		if (i == 5)
			break;
		printf("%d ", i);
		i++;   //循环变量的调整部分
	}
	return 0;
}

运行结果为:

1 2 3 4

将break改为continue看看,发现运行结果为:

输出4之后,光标持续闪烁,因为在while循环中,continue的作用是跳过本次循环continue后面的代码(这样就跳过了printf("%d ", i);i++; 这两条语句),直接程序又去到判断部分,看是否进行下一次循环。

2、代码示例

示例一:

看一下下面这段代码是什么意思

int main()
{
	int ch = 0;
	while ((ch = getchar()) != EOF)
		putchar(ch);
	return 0;
}

运行结果如下:

输入什么字母就会输出什么字母,想要退出该程序的运行,就使用快捷键“ctrl + z”。

a
a
A
A
^Z

getchar这个是指如果读取成功的话,返回的是ASCII码值,若读取失败,则返回的是EOF(end of file),是文件结束标志。

测试getchar的功能

int main()
{
	int ch = getchar();
	printf("%c\n",ch);
	//putchar(ch);//这条语句与上一条语句一样的意思
	return 0;
}

运行该测试代码,在打印结果的窗口,键入一个A字符回车,就会打印出A字符。(putchar是指输出一个字符)

在getchar和键盘之间有一个缓冲区,键入字符“A”就相当于将“A\n”放进了缓冲区里面。

示例二:

假设输入一段字符作为密码,将该密码存放到字符串passwd里面,然后弹出一个“请确认密码”的提示,如果确认密码正确就键入“Y”,输出“确认成功”;否则键入“N”,输出“确认失败”。编写的代码如下:

int main()
{
	char passwd[20] = { 0 };
	printf("请输入密码:>");
	scanf("%s",passwd);//假设输入的密码是2022
	//这里passwd不取地址的原因是passwd是个数组,数组的数组名本身就是个地址,所以
	//此处没有给passwd加上取地址符
	printf("请确认密码(Y/N):>");
	int ch = getchar();
	if (ch == 'Y')
	{
		printf("确认成功\n");
	}
	else
	{
		printf("确认失败\n");
	}
	return 0;
}

运行该代码的结果如下:

请输入密码:>2022
请确认密码(Y/N):>确认失败

显然,该代码是存在错误的。还没等输入Y/N,就提示确认失败了。这是为甚呢?因为我们在键盘上键入“2022”之后,还会键入一个回车,此时放到缓冲区就放的是“2022\n”。

而scanf与getchar是输入函数,它们不是直接从键盘上拿数据,而是从中间的缓冲区去拿数据,如果缓冲区没有数据,它就会等待从键盘上输入一点信息到缓冲区里面去。scanf只会将缓冲区里面的“2022\n”里的“2022”拿走,缓冲区里面还剩下“\n”;getchar在读取的时候,就没有作等待动作,直接将缓冲区里面的“\n”拿走了,所以还么等我们输入Y/N,就已经打印了“确认失败”。

如何修正程序呢?

将执行scanf之后的缓冲区里面的“\n”拿走,也就是将缓冲区清理干净,这样的话getchar函数就得等待输入,就可以正确运行了。

代码如下:

int main()
{
	char passwd[20] = { 0 };
	printf("请输入密码:>");
	scanf("%s",passwd);//假设输入的密码是2022
	printf("请确认密码(Y/N):>");
	//清理缓冲区
	getchar();//处理'\n'
	int ch = getchar();
	if (ch == 'Y')
	{
		printf("确认成功\n");
	}
	else
	{
		printf("确认失败\n");
	}
	return 0;
}

运行结果为:

请输入密码:>2022
请确认密码(Y/N):>Y
确认成功

这时候对于连续的密码输入来说是正确运行的,那么对于不连续(中间有空格)的呢?

比如密码是“2022 abc”,执行结果如下:

请输入密码:>2022 abc
请确认密码(Y/N):>确认失败

可以看出,程序还是存在纰漏。那么怎么处理呢?这就要将缓冲区里面的多个字符都给清理干净。此时只一个getchar函数处理不掉空格以及“\n”了,可以使用while循环,让它一直读取,直到将“\n”都读走。

int main()
{
	char passwd[20] = { 0 };
	printf("请输入密码:>");
	scanf("%s",passwd);//假设输入的密码是2022
	printf("请确认密码(Y/N):>");
	清理缓冲区
	//getchar();//处理'\n'
	//清理缓冲区中的多个字符
	int tmp = 0;
	while ((tmp = getchar()) != '\n')
	{
		;
	}
	int ch = getchar();
	if (ch == 'Y')
	{
		printf("确认成功\n");
	}
	else
	{
		printf("确认失败\n");
	}
	return 0;
}

请输入密码:>2022 abc
请确认密码(Y/N):>Y
确认成功

示例三:

//只会打印数字
int main()
{
	int ch;
	while ((ch = getchar()) != EOF)
	{
		if (ch < '0' || ch > '9')
			continue;
		putchar(ch);
	}
	return 0;
}

根据ASCII码值,我们可以知道该段代码的意思是:如果不是数字就continue,执行continue会跳过putchar(ch)这句话,所以这段代码最终只会打印输入的数字,想要终止运行,键入“ctrl+z”即可。代码运行结果如下:

1
1
3
3
9
9
^Z

到此这篇关于C语言示例讲解while循环语句的用法的文章就介绍到这了,更多相关C语言while循环内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C语言详细讲解while语句的用法

    目录 while语句格式 例题1 例题2 例题3 while语句格式 格式: while(表达式){    语句块} 1.先执行while(表达式),如条件为真执行语句块: 2.执行完语句块,继续执行表达式: 3.知道表达式为假.就退出循环,执行while后面的代码. 例题1 用while语句,输出0-9的值. 代码: #include <stdio.h> int main (void) { int i=0; //初始条件i=0; while(i<10) //while 循环 //whi

  • C语言中while与do-while的介绍与注意事项

    一.while和do-while的简介  1). while语句  语法: while(表达式){ 循环体; } 循环过程: 1.先判断表达式,是否为真,如果为真跳转到2,否则跳转到3 2.执行循环体,执行完毕,跳转到1 3.跳出循环 2). do-while语句 语法: do{ 循环体; }while(表达式);  注意:这个while后面的小括号必须接; 循环过程: 1.先执行循环体,执行完毕跳转到2 2.判断表达式的结果是否为真,如果为真,跳转到1,否则跳转到3 3.跳出循环 3). do

  • C语言 while for do while循环体详解用法

    while循环 表达式: while(表达式) { 循环语句: } while 语句执行流程图: 例子: 打印1-10的数字 #include <stdio.h> int main() { int i = 1; while(i<=10) { printf("%d ", i); i +=1; } return 0; } 注意 ①在while中遇到break,终止整个循环 ②continue ,跳过本次循环continue后边的代码,直接去while循环的判断部分,进行下

  • C语言 while语句的用法详解

    在C语言中,共有三大常用的程序结构: 顺序结构:代码从前往后执行,没有任何"拐弯抹角": 选择结构:也叫分支结构,重点要掌握 if else.switch 以及条件运算符: 循环结构:重复执行同一段代码. 前面讲解了顺序结构和选择结构,本节开始讲解循环结构.所谓循环(Loop),就是重复地执行同一段代码,例如要计算 1+2+3+--+99+100 的值,就要重复进行99次加法运算. while循环 while循环的一般形式为:     while(表达式){         语句块  

  • C语言中do-while语句的2种写法示例

    while循环和for循环都是入口条件循环,即在循环的每次迭代之前检查测试条件,所以有可能根本不执行循环体中的内容.C语言还有出口条件循环(exit-condition loop),即在循环的每次迭代之后检查测试条件,这保证了至少执行循环体中的内容一次.这种循环被称为do while循环. 看下面的例子: #include <stdio.h> int main(void) { const int secret_code = 13; int code_entered; do { printf(&

  • c语言for、while和do-while循环之间的区别

    for,while,do-while区别 循环结构 1.初始化变量:for循环当中定义的初始化变量,只有自己才能用:while和do-while循环,初始化变量本来就在外面,所以外面也照样可以使用.2.执行次数:for循环和while循环是(先判断后执行),但是do-while循环是(先执行后判断).3.使用的普遍性不同:绝大多数情况下,三种循环可以来回转换.但是凡是次数确定.范围确定的情况,使用for循环. 详细例子如下:编程计算1+2+3+……+100a.用for循环 #include <s

  • C语言 用while循环求和的平均值操作

    Ⅰ.用while循环求和的平均值: ①.//代码摘下直接可以运行 #include<stdio.h> int main() { int count=0,total,number; total=0; //total:存放累加和 printf("Please input six number!\n"); while(count<=5) //循环控制条件 { count++; //循环体 scanf("%d",&number); printf(&

  • C语言示例讲解while循环语句的用法

    目录 1.while语句结构 2.代码示例 在学习和回顾该知识前,已经掌握了if语句的结构和用法. if (条件)    语句; 当条件满足的情况下,if结构中的语句执行,且只执行一次:条件不满足则不执行.但是生活中常常需要将一件事情完成很多次,这时候就要用到while语句来实现循环了. 1.while语句结构 while (表达式)    循环语句; 例子:利用循环结构打印1-10 #include <stdio.h> int main() { int i = 0; while(i <

  • C语言示例讲解if else语句的用法

    目录 1.前言 2.if语句的语法结构 3.关于if else语句的示例 4.if else 书写形式的对比 5.例子 1.前言 (1)C语言是结构化的程序设计语言.C语言的三种基本程序结构分别是: 顺序结构:按照程序顺序执行 选择结构:根据判断结果选择分支方向 循环结构:指有一个循环体,可以根据判断条件决定循环多少次 (2)分支语句(选择语句)和循环语句 (3)什么是语句? C语言中由一个分号(;)隔开的就是一条语句. 2.if语句的语法结构 大致分为三种: if(表达式)    语句; if

  • C语言示例讲解switch分支语句的用法

    目录 1.了解switch分支语句 2.示例 3.default子句 4.练习 1.了解switch分支语句 switch语句也是一种分支语句,常常用于多分支的情况. 比如: 输入1,就会输出星期一 输入2,就会输出星期二 … 输入7,就会输出星期七 对于这样的代码需求,如果用if .else if.else的形式就会显得太复杂.如何用switch语句实现该功能呢?switch语句的结构又是怎样的呢? switch(整型表达式){    语句项;} 其中,整型表达式必须为整型,且为常量(字符也可

  • C语言实例讲解四大循环语句的使用

    目录 一.do…while()循环 1. 图示流程 2. 代码流程 3. 示例代码1到100求和) 二.while()循环 1. 图示流程 2. 代码流程 3. 示例代码(1到100求和) 三.for()循环 1. 图示流程 2. 代码流程 3. 示例代码(1到100求和) 四.goto循环 1. 代码流程 2. 示例代码-1(1到100求和) 3. 示例代码-2 一.do…while()循环 1. 图示流程 从上面图示 do…while() 语句流程中可以看出,do…while() 语句会先进

  • C语言示例讲解for循环的用法

    目录 1.循环语句for的语法 2.for循环中的break以及continue 3.for语句的循环变量控制的一些建议 4.for循环的变种 5.题目 1.循环语句for的语法 for (表达式1;表达式2;表达式3)    循环; 其中,表达式1是初始化:表达式2是判断:表达式3是调整. 示例:用for循环打印1-10. int main() { int i = 0; for (i = 1; i < 11; i++) printf("%d ",i); return 0; }

  • C语言示例讲解do while循环语句的用法

    目录 1.do while()循环-先执行后判断 2.do while中的break以及continue 3.练习 4.猜数字游戏 1.do while()循环-先执行后判断 do语句的语法 do    循环语句;while(表达式); 此处的循环语句可能不是一条语句,而是一段代码. 示例:利用do while循环实现打印1-10 #include <stdio.h> int main() { int i = 1; do { printf("%d ",i); i++; }

  • Go语言基础for循环语句的用法及示例详解

    目录 概述 语法 注意 示例一  死循环,读取文件 示例二  打印乘法表 示例三  遍历字符串,数组,map 概述 for循环是一个循环控制结构,可以执行指定次数的循环 语法 第一种 for {} //无线循环 第二种 for 条件语句{} 第三种 for 初始语句; 条件语句; 迭代后语句 {} 第四种 for key,value:=range 表达式/变量{} 注意 省略初始条件,相当于while循环体必须用 { } 括起来初始化语句和后置语句是可选的如果只剩下条件表达式了,那么那两个分号也

  • C语言示例讲解转义字符的用法

    目录 1.转义字符\t. 2.转义字符\n. 3.转义字符\? 4.转义字符\'. 5.转义字符\''. 6.转义字符\\ , \t. 7.转义字符\a, \b, \f, \n, \r, \v. 8.转义字符\ddd 9.转义字符\xdd. 10.习题求字符串长度 1.转义字符\t. 代码段1: #include<stdio.h> int main() { printf("c:\test\test.c"); return 0; } “\”和“t”组成了一个转义字符“\t”.

  • C语言进阶教程之循环语句缺陷详析

    目录 前言 1 循环语句的三要素 2 使用不同循环语句实现六种排列组合 2.1 第一种排列(ABC) 2.2 第二种排列(ACB) 2.3 第三种排列(BCA) 2.4 第四种排列(CBA) 2.5 第五种排列(BAC) 2.6 第六种排列(CAB) 3 什么时候用for循环语句 4 什么时候用while循环语句 5 什么时候用do-while循环语句 6 其他情况 7 总结 前言 你是否也有过下面的体会? 为什么刚开始学习C语言时很喜欢用for循环语句,但逐渐发现有经验的工程师都在用while

  • C语言示例讲解结构体的声明与初始化方法

    目录 一.结构体声明的结构 1.直接声明 2.使用typedef声明一个新的类型 3.不完全声明 二.结构体初始化 1.声明(同时定义)时直接赋值 2.定义时直接赋值 3.定义后赋值 4.指定初始化 一.结构体声明的结构 1.直接声明 struct tag { member-list: member-list: member-list: ... } variable-list; tag 是结构体类型的标签. member-list 结构体的元素定义,比如 int i; 或者 float f,或者

随机推荐