最近我在做什么?
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
while中的continue会直接跳过调整部分,导致程序停留在4后的死循环
在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后的死循环
本周学到这,有问题请及时指出!