2021.10.21凌晨四点区区周记

最近我在做什么?
python:开始着手切片的小小应用
c:学习三种循环体以及区别,递归进度0

明白了
define是一个预处理指令,定义符号定义宏,完成宏替换,非关键字
 

#include <stdio.h>
#define ADD(x,y) ((x)+(y))

int main ()
{
	printf ("%d\n",4*ADD(2,3));
	
	return 0;
}
#include <stdio.h>
#define ADD(x,y) x+y

int main ()
{
	printf ("%d\n",4*ADD(2,3));
	
	return 0;
}

1. 宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名,这只是一种简单的代换,字符串中可以含任何字符,可以是常数,也可以是表达式,预处理程序对它不作任何检查。如有错误,只能在编译已被宏展开后的源程序时发现。

2. 宏定义不是说明或语句,在行末不必加分号,如加上分号则连分号也一起置换。

3. 宏定义必须写在函数之外,其作用域为宏定义命令起到源程序结束。如要终止其作用域可使用#undef命令。

二、在循环体中的 getchar 和 scanf函数都为输入函数 从缓冲区获取
                                            怎么理解?
 

#include <stdio.h>
int main ()
{
	char password[20] = {0};
	printf ("请输入密码:");
	scanf ("%s",password);
	
	printf ("请确认(Y/N):");
	
	int ch = getchar();
	
	if (ch == 'Y')
	{
		printf ("确认成功"); 
	 } 
	else 
	{
		printf ("确认失败"); 
	 } 
	
	
	return 0; 
}
当输入123456回车时候,会主动跳过确认环节而直接确认失败,是因为getchar在获取信息时候,回车也会处于缓冲区域,会以“\n”被读取, 则会被getchar检录,直接运用到if中,此时\n不为Y,则直接输出确认失败 其实只要在输入密码后,清理缓冲区 \n

在scanf 后 利用 getchar ( );拿走缓冲区中 的回车 起到缓冲的作用
 

而当.............
输入密码为123456 abcd时候,又会报错,此时则需要借助循环体,逐个检查缓冲区域内的字符,知道不满足该循环体时,即检测到回车时,跳出循环体
改动如下
 

#include <stdio.h>
int main ()
{
	char password[20] = {0};
	printf ("请输入密码:");
	scanf ("%s",password);
	
	printf ("请确认(Y/N):");
	//getchar ();
	int temp = 0;
	while (temp = getchar()  != '\n') //清理缓存区内容 
	{
		;
	}
	int ch = getchar();
	
	if (ch == 'Y')
	{
		printf ("确认成功"); 
	 } 
	else 
	{
		printf ("确认失败"); 
	 } 
	
	
	return 0; 
}

三、 注意for和while循环中 for的初始化只会被执行一次,且 continue语句也有以下不同
 


while中的continue会直接跳过调整部分,导致程序停留在4后的死循环
本周学到这,有问题请及时指出!
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值