C语言------分支和循环语(二)

循环语句  

在现实生活中,又很多事情重复做的吃饭睡觉等;又例如:当你还不是一个大牛的时候,每天努力的学习知识;这就是一个循环;

在C语言中,循环有三种分别为: for  ,   while    ,  do .... while ; 

1.while循环语法:

while (循环条件表达式)

{

        循环语句;

        循环变量的迭代;

}

注意:这里的循环条件表达式可以是布尔表达式,也可以是一个结果为真的表达式------C语言中0表示真非0表示假!

举个栗子(打印1---10):

#include<stdio.h>

int main()
{
    int i = 1;//初始化
    while(i <= 10)//判断
    {
        printf("%d\t", i);
        i += 1;//调整
    }
    return 0;
}

运行结果:

2.while中的continue和break;

2.1break

在介绍break之前我们想让你来看一段代码(并思考一下您的答案):
 

#include<stdio.h>

int main()
{
	int i = 1;//初始化
	while (i <= 10)//判断
	{
		if (i == 5)
		{
			break;
		}

		printf("%d\t", i);
		i++;//调整
	}
	return 0;
}

运行结果和代码解释:

 这里打印的结果是否和您的预想一样?

break: 打破、结束的意思。结合上面代码的运行结果可知,当循环遇到break是就会结束掉!

因为判断条件是当i == 5的时候结束(break)所以只打印了1 2 3 4

总结:只要循环中遇到break就会结束掉 当前 循环(不管有没有执行结束)!由于这里只有一个while循环所以就直接结束掉了循环!

2.2continue 

同样在介绍break之前我们想让你来看两段代码(并思考一下您的答案):

#include<stdio.h>

int main()
{
	int i = 1;//初始化

	while (i <= 10)//判断
	{
		if (i == 5)
		{
			continue;
		}

		printf("%d\t", i);
		i++;//调整
	}

	return 0;
}

思考代码的结果然后看第二段代码:

#include<stdio.h>

int main()
{
	int i = 1;//初始化

	while (i <= 10)//判断
	{
		i++;//调整

		if (i == 5)
		{
			continue;
		}
		printf("%d\t", i);
	}

	return 0;
}

运行结果以及代码解:

(1)

(2)

 continue : 继续的意思;结合上面两个代码以及运行结果就会发现 :当循环中遇到continue就会跳过continue后面的内容!

代码1运行解释:

 代码2运行解释:

 总结:continue是终止本次循环,也就是是说continue后面的他都不会执行会直接跳过,进入下一次循环!

OK,下面我没问你再来看几个代码:
 

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

运行结果:

 这里注意到,上面有两个函数------>getchar和putchar我们来仔细看一看其作用:

getchar:

 

getchar这个函数的返回值类型是 int 其形参列表为 void 其作用是 返回输入的字符的ASCII码值。当读取字符成功时返回字符(的ASCII值),否则返回EOF,这里又出现了一个新的东西EOF究竟是啥呢?它的全称是END OF FILE,其实他就是-1;我们可以看一看它的底层实现:

putchar :

 putchar这个函数返回值类型是 int 参数列表是该字符的ASCII值,其作用是标准化输出字符,当接收成功这个字符的ASCII值时输出这个字符ASCII值,否则输出EOF(-1);

ok ,举个小小的例子用一下上面的两函数:

#include<stdio.h>

int main()
{

	int ch = 0;
	ch = getchar();
	printf("getchar的返回值打印:\n");
	printf("%d\n", ch);
	printf("putchar的打印字符和返回值打印:\n");
	printf("\n%d", putchar(ch));
	return 0;

}

 运行结果:

难道这两函数的作用就是这个吗?当然买不是啦!就让我们来一起见识一下这两函数的真实作用:

代码演示(输入密码确认):(假设密码是:123456):

#include<stdio.h>
int main()
{
	char arr[20] = { 0 };
	printf("请输入密码:>\n");
	scanf("%s", arr);
	char input = 0;
	printf("请再次确认密码Y/N:>\n");
	if (getchar() == 'Y')
	{
		printf("登陆成功!\n");
	}
	else
	{
		printf("登陆失败!\n");
	}
	return 0;
}

ok ,代码已经写完了,您觉得是否正确呢?

运行结果以代码解释:

 这里还没有,确认就自动已经输出失败了Why?这里在说getchar和putchar之前要先介绍一下缓冲区:(画图演示):

当scanf/getchar在输入这些字符时,会先放到缓冲区,当缓冲区无字符时就会等着你输入(闪光标),输入后就会读取!那么上面那个代码是不是在输入Y/N前加一个getchar就好了呢?让我们试一下:

 结果确实看起来好像们有问题了,但你如果这样输入就有问题了:

中间加一个空格 就不行了,因为scanf格式话输入就是个非空格以前的东西;

 那么这段代码真的没救了吗?不是的。我们只要想办法把\n前的东西处理掉就好了!我们为您学了while循环正好可以用来处理这个问题:

#include<stdio.h>
int main()
{
	char arr[20] = { 0 };
	printf("请输入密码:>\n");
	scanf("%s", arr);
	char input = 0;

	while (getchar() != '\n')
	{
		;
	}

	printf("请再次确认密码Y/N:>\n");
	if (getchar() == 'Y')
	{
		printf("登陆成功!\n");
	}
	else
	{
		printf("登陆失败!\n");
	}
	return 0;
}

运行结果:

 这样才没有问题了!

ok !感谢观看,好兄弟下期再见!!!

猜你喜欢

转载自blog.csdn.net/m0_75256358/article/details/130456489