C语言知识小清单(2)之这些小细节你知道吗?

[

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

`提示:本文主要介绍选择与循环语句的小细节

提示:以下是本篇文章正文内容,下面案例可供参考

一、sizeof的使用

sizeof是一个操作符
计算类型和变量大小、

	printf("%d\n", sizeof(int));
	printf("%d\n", sizeof(a));
	//int类型四个字节
	//使用sizeof计算数组的大小
	int arr[10] = { 0 };
	printf("%d\n", sizeof(arr));

二、单目操作符~

规则:按位取反
代码如下(示例):

//按(二进制位)取反码
//负数的计算:原码,反码,补码,printf打印源码
	a = 0;
	printf("%d\n", ~a);
	/*why是-1?0是整数类型,整数在内存中存储的是补码,最高位1表示负数
	原码为00000000000000000000000000000000
	取反得补码为11111111111111111111111111111111
	反码为11111111111111111111111111111110
	原码为10000000000000000000000000000001即-1
	总结:从原码到反码符号不变,其他取反,反码到补码,符号不变,个位取反,
	其他不变*/

三、选择结构

else的小陷阱(新手必读)

注意:else的排版很重要
请问打印什么?

 a = 1;
	 b = 2;
	if (a == 3)
	if (b == 2)
		printf("yes");
		else
		printf("no");*/
		//其实啥也不打印,else和最近的if匹配
		//if(a==5)与if(a=5)的区别
			//前者表示判断a是否等于5
			//后者表示a被赋值为5,即i

switch语句格式

int day = 0;
			scanf("%d\n", &day);
			switch (day)
			{
			case 1:
				printf("星期一");
				break;

			case 2:
				printf("星期二");
				break;
			case 3:
				printf("星期三");
				break;
			case 4:
				printf("星期四");
				break;
			case 5:
				printf("星期五");
				break;
			case 6:
				printf("星期六");
				break;
			case 7:
				printf("星期天");
				break;
			default:
				printf("无");
				break;
//			//case后面只能是整形常量表达式
//			//case 1.0或case n 都是错的
//			//case是入口,break是出口

			}

四.循环结构

  • 循环结构(不断做一件事,直到不满足条件)
  • 好比我们的求学历程,你只有一直变强,才有可能摆脱现状遇见更强的人

continue的作用

本次循环跳过后面代码重新回到条件判断

 i = 1;
	while (i <= 10)
	{
		if (i == 5)
			continue;
		printf("%d\n", i);
		i++;
	}

猜猜为什么不打印6,7,8,9

getchar与putchar的分析

  1. getchar读取一个字符,返回字符的AscII码值
    如果读取失败,返回的是EOF—>-1,ASCII值:0~127
  2. putchar-打印一个字符

试分析为什么会默认进入else

	int ps = getchar();
	putchar(ps);
	//解读getchar清除缓冲区
	printf("请输入密码");
	char password[20] = { 0 };
	scanf("%s",&password);
	printf("请确认密码(Y/N):");
	int ch = getchar();
	if (ch == 'Y')
	{
		printf("确认成功");

	}
	else
	{
		printf("确认失败\n");
	}

输入的流程:scanf/getchar-缓冲区-人为敲键盘
缓冲区如小岛秀夫的《死亡搁浅》的冥滩(ps:没玩过这款游戏的读者可跳过这段比喻))
在这里插入图片描述

在exe中输入完密码:12345+回车=12345+\n
scanf只读取到5就停止,\n停留在缓冲区上
轮到getchar,它直接把缓冲区的\n读取,ch=\n,进入else
那如何清空缓存区?

printf("请输入密码");
	 
	scanf("%s", &password);
	printf("请确认密码(Y/N):");
	//清空缓存区
	while (getchar()!='\n')
	{
		;
	}
	 ch = getchar();
	if (ch == 'Y')
	{
		printf("确认成功");

	}
	else
	{
		printf("确认失败");
	}

运用,如何只打印数字字符?

 char ch = '\0';
	while ((ch=getchar())!=EOF)
		//当我输入一个正常的字符
	{
		if (ch < '0' || ch>'9')
		    continue;
		putchar(ch);
	}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江财菊圃路彭家桥C++一霸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值