项目注意点
2016-11-01 本文已影响8人
b6aed1af4328
- 定义一个结构体指针时,一定要给定明确指向。要么malloc,要么head,head->next,要么NULL,决不能空在那。不给指向再用该指针,很容易造成系统蹦的。
- 要考虑清分几种情况。碰到的大多数问题是NULL->next后直接崩溃。而这个问题在把函数的几种情况都用if语句考虑进去后,所需查的也只有for循环的条件判断语句了,检查起来,轻车熟路。
- 千万千万不要重复读取,因为读取时用的malloc,重复读取用新的malloc,新的地址。在写教师自身信息查看等需用到节点地址的地方,重复读取,容易造成地址传递失灵。
- 大纲大纲很重要!非常重要!
- ++作为单目运算符,优先级很高,但是是先取值,后计算的。
- static要考虑局部变量、全局变量、函数3种情况,而我只考虑了2种。
- 指针的指针在你调用函数时传递的为地址,而地址已改变,你不想返回时,用指针的指针。
要想改变值,就传指针;要想改变指针,就传指针的指针。--由天才HXW提供。 - 宏定义和函数指针在成绩排序时很好用,毕竟数学、语文、C、总成绩的排序大部分相同,只有中间的if判断不同。用带参宏定义和函数指针可以节省不少行代码。
- 密码遮掩可用getch(),但使用该函数需要conio.h头文件,该头文件在linux下没有。找到了一种替代办法:先用system("stty -echo“)不显示输入内容,再用system("stty echo")恢复显示输入内容。
void secretScanf(char *str,int size)//借助stty-echo实现密码输入
{
int i=0;
for(i=0;i<size;i++)
{
system("stty -echo");
str[i]=getchar();
printf("*");
if(str[i]=='\n')
{
break;
}
}
if(str[i]=='\n')
{
str[i]='\0';
}
else
{
str[i]='\0';
while(getchar()!='\n');
}
system("stty echo");
}
- 验证码 需要time.h头文件和rand函数。
void secureCode()//验证码
{
char securityCode[20];
char code[5][20]={"nishini","bushini","sheishini","haishini","zhishini"};
int i;
srand((unsigned)time(NULL));
i=rand()%5;
printf("请输入验证码:%s\n",code[i]);
myScanf(securityCode,20);
while(strcmp(securityCode,code[i])!=0)
{
printf("验证码错误,请重新输入\n");
i=rand()%5;
printf("请输入验证码:%s\n",code[i]);
myScanf(securityCode,20);
}
return;
}