栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

第7讲 - C语言关键字(7)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

第7讲 - C语言关键字(7)

我们先来讲一下switch case语句

int main()
{
	int a = 0;
	while (1)
	{
		printf("qing shu ru shuzin");
		scanf("%d", &a);
		switch (a)
		{
		case 1:
			printf("星期一n");
			break;
		case 2:
			printf("星期二n");
			break;
		case 3:
			printf("星期三n");
			break;
		case 4:
			printf("星期四n");
			break;
		case 5:
			printf("星期五n");
			break;
		case 6:
			printf("星期六n");
			break;
		case 7:
			printf("星期日n");
			break;
		}
	}
	return 0;
}

我们知道,任何具有判断能力的语法结构,都必须具有:判定和分支功能

switch case语句也同样相同:switch case语句中,case充当判定功能,break充当分支功能,switch(),括号内部的元素必须为整型或者整型表达式:注意:short char等都是整型

我们知道,case语句充当判定功能,那么break是如何充当分支功能呢?

我们对代码进行修改:我们把周一到周三的break语句去除掉

int main()
{
	int a = 0;
	while (1)
	{
		printf("qing shu ru shuzin");
		scanf("%d", &a);
		switch (a)
		{
		case 1:
			printf("星期一n");
		case 2:
			printf("星期二n");
		case 3:
			printf("星期三n");
		case 4:
			printf("星期四n");
			break;
		case 5:
			printf("星期五n");
			break;
		case 6:
			printf("星期六n");
			break;
		case 7:
			printf("星期日n");
			break;
		}
	}
	return 0;
}

我们进行编译,输入1

我们可以发现,结果出现星期一 二三 四,原因是什么?

答:switch case语句中的break起到了分支功能,如果没有break,case 1 2 3 4中的语句就会混淆在一起,所以break起到了分支功能

第二点:switch语句记得要加上default,default的意思是假如以上条件全部不满足,就执行default语句

第二个问题,能否在case语句和break之间创建变量

答:不能,例如

int main()
{
	int a = 0;
	while (1)
	{
		printf("qing shu ru shuzin");
		scanf("%d", &a);
		switch (a)
		{
		case 1:
			int b = 10;
			printf("星期一n"); 
			printf("星期一n");
			printf("星期一n");
			printf("星期一n");
            printf("%dn", b);
			break;
		case 2:
			printf("星期二n");
			break;
		case 3:
			printf("星期三n");
			break;
		case 4:
			printf("星期四n");
			break;
		case 5:
			printf("星期五n");
			break;
		case 6:
			printf("星期六n");
			break;
		case 7:
			printf("星期日n");
			break;
		default :
			printf("你输入的日期有误,请重新输入n");
			break;
		}
	}
	return 0;
}

 我们在case 1和break之间初始化代码创建变量b,进行运行,

 代码报错,那么如何正确书写呢?

我们直接在case语句内部加上花括号即可

int main()
{
	int a = 0;
	while (1)
	{
		printf("qing shu ru shuzin");
		scanf("%d", &a);
		switch (a)
		{
		case 1:
		{
				  int b = 10;
				  printf("星期一n");
				  printf("星期一n");
				  printf("星期一n");
				  printf("星期一n");
				  printf("%dn", b);
				  break;
		}
		case 2:
			printf("星期二n");
			break;
		case 3:
			printf("星期三n");
			break;
		case 4:
			printf("星期四n");
			break;
		case 5:
			printf("星期五n");
			break;
		case 6:
			printf("星期六n");
			break;
		case 7:
			printf("星期日n");
			break;
		default :
			printf("你输入的日期有误,请重新输入n");
			break;
		}
	}
	return 0;
}

如何写出多条case语句执行同一个语句的代码?例如case1到5运行时打印结果周内,case6到7运行时打印结果周末

答:很简单,我们只需要删掉case1到case4的全部内容,在case5语句的内部写出我们所要执行程序的结果,case6 和7也同理

int main()
{
	int a = 0;
	while (1)
	{
		printf("qing shu ru shuzin");
		scanf("%d", &a);
		switch (a)
		{
		case 1:
	
		case 2:
		case 3:
		case 4:
		case 5:
			printf("周内n");
			break;
		case 6:
		case 7:
			printf("周末n");
			break;
		default :
			printf("你输入的日期有误,请重新输入n");
			break;
		}
	}
	return 0;
}

我们进行运行

 注意:default语句不一定全部都要放在末尾,default语句可以放在switch语句内部的任意位置,并不会影响代码的逻辑执行顺序

如何使用switch case语句在我们想要中断的case语句部位中断?

int main()
{
	int b = 0;
	while (!b)
	{
		printf("qing shu ru shuzin");
		int a = 0;
		scanf("%d", &a);
		switch (a)
		{
		case 1:
	
		case 2:
			 b = 1;
		case 3:
		case 4:
		case 5:
			printf("周内n");
			break;
		case 6:
		case 7:
			printf("周末n");
			break;
		default :
			printf("你输入的日期有误,请重新输入n");
			break;
		}
	}
	return 0;
}

如代码所示,我们首先创建变量b,变量b=0,我们的while循环判断语句内容是!b,b=0,在逻辑上是否的意思,!b在逻辑上是是的意思,我们进入循环,在想要终止的case语句内部把b初始化为1,那么!b的结果就是0,退出循环。

我们都知道,case 语句后面的是常量,我们的const修饰的常变量能否直接作为case语句的判断条件呢?

答:我们写代码来进行检测

int main()
{
	const int a = 10;
	switch (1)
	{
	case a:
		printf("4");
		break;
	default :
		break;
	}
	return 0;
}

我们进行编译,代码报错

所以 const修饰的长变量是不能直接当作case的判断条件的,case语句的判断条件必须是严格意义上的整型

那么宏定义的可以吗?

答:我们进行检测

#define A 10
int main()
{
	 int a = 10;
	switch (a)
	{
	case A:
		printf("4");
		break;
	default :
		break;
	}
	
}

我们进行编译

所以宏定义的变量是能够被当作case语句的判定条件的 

注意:我们在排列case语句时,可以通过case语句的执行频率来排列case语句 ,也就是最常执行的放在最前面,最少执行的放在最后面

for死循环该如何书写

int main()
{
	for ( ; ; )
	{
		printf(".");
		
	}
	return 0;
}

我们进行编译

 在任何c程序中,在默认编译好之后,都有三个输入输出流

stdin:标准输入      文件名是FILE*STDIN  ,对应的是键盘

stdout :标准输出    文件名FILE*STDOUT ,对应的是显示器

stderr:标准错误    文件名是FILE*STDERR  ,对应的是显示器

现阶段的学习,我们只需要记住就可以

 getchar需要注意的一些事项

getchar会接受键盘上的回车键,会把他默认为换行符

例如

int main()
{
	while (1)
	{
		int c = getchar;
		if (c == '#')
		{
			break;
		}
		printf("%cn", c);
	}
	return 0;
}

因为我们的getchar识别键盘上的回车键作为换行符,又因为我们打印时,又写了一个换行,所以程序运行时,会隔两行

 所以我们在调用getchar函数时,不用换行分割符,因为getchar自身就会识别我们回车键给的换行符

我们去掉我们自己加上的换行符后

代码就恢复正常了 

第二个注意事项

我们知道,getchar接受的是字符,为什么返回的要是整型呢?

答:假如我们输入成功,没什么两样,假如我们输入失败,因为我们char的类型的有效数字是0到255,换算成二进位制就是0000 0000到1111 1111,假设我们的错误对应的二进位制是10000 0000,那么我们在返回时,只能返回后八位,也就是0000 0000,那么在编译器看来,我们输入的值仍在合法范围内,输入依旧成功

 注意:我们在键盘中输入的内容,或者显示器打印的内容全部都是字符

我们进行验证

int main()
{
	int ret=printf("%d", 1234);
	printf("%d", ret);
	return 0;
}

我们进行编译

 我们可以发现,printf实际上是字符,我们输入了四个数字,所以就是四个字符

例如

int main()
{
	int a = 0;
	scanf("%d", &a);
}

假设我们输入的数字是1234,那么实际上,输入的是四个字符,这四个字符是1,2,3,4

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1005271.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号