昨天写了一个教务管理系统,今天增加两个功能,账号的注册和账号的登录
先设置一个account[10][2]的全局数组,用来存放账号和密码
再设置一个vip表示存入数组的人数
int account[10][2];
int vip = 0;//当前账户个数
再写一个跟昨天一样的选择页面
int loginOrEnroll()
{
int option;
printf("************欢迎进入海峰考务系统****************\n");
printf(" 1.登录\n");
printf(" 2.注册\n");
printf("*************************************************\n");
printf("请选择:");
scanf("%d",&option);
return option;
}
选择1或2,并且将值返回,接下来在主函数用一个option来接收返回值,用switch写两个选项,1就调用登录函数,2就调用注册函数
option = loginOrEnroll();
switch(option)
{
case 1:
flag = login();
break;
case 2:
enroll();
break;
}
一般我们要先注册,所以先写注册函数,设置一个usrname和password来接收键盘输入的账户和密码,先判断vip(注册的人数)是否大于数组的最大值,没有则将值赋给数组,vip++
void enroll()
{ int usrname, password;
printf("请输入新的用户名:\n");
scanf("%d", &usrname);
printf("请输入密码:\n");
scanf("%d", &password);
if(vip >= 10)
{
printf("注册已满\n");
}
else
{
account[vip][0] = usrname;
account[vip][1] = password;
vip++;
printf("注册成功\n");
}
}
再写一个登录函数,我想的是登录只有三次机会,登录成功用1返回,登录失败用0返回,
int login()
{
int usrname, password;
int flag = 0;
for(int j = 3; j > 0; j--)
{
printf("请输入用户名:\n");
scanf("%d", &usrname);
printf("请输入密码:\n");
scanf("%d", &password);
for(int i = 0; i < vip; i++)
{
if(account[i][0] == usrname && account[i][1] == password)
{
printf("登录成功\n");
flag = 1;
break;
}
else
{
printf("登录失败,你还有%d次机会\n", j - 1);
flag = 0;
break;
}
}
if(flag == 1)
{
break;
}
}
return flag;
}
当登录函数返回值为1时表明登录成功,然后跳出死循环,进入到昨天写的代码,如果没有则不能进入后面的步骤
while(1)
{
option = loginOrEnroll();
switch(option)
{
case 1:
flag = login();
break;
case 2:
enroll();
break;
}
if(flag == 1)
{
break;
}
}
指针
1. 概念
计算机种所有的数据都必须存在内存中,不同数据类型的数据占用的字节数不同,为了能够正确的访问这些数据,C语言就为每个字节都设置了编号,这个编号就叫做地址或者叫指针
在C语言中,将地址形象的称为“指针”,一个变量的的地址称为变量的“指针”,一个专门用来存放另一个变量的地址的变量,则称为指针变量
地址:操作系统的寻址空间编号,也就是操作系统给每个存储单元分配了统一的编号
指针就是地址
指针变量就是保存地址编号的变量
32bit平台下,地址总线32位,所以地址编号32位编号,指针变量就是32位即4字节
2. 指针的定义方法
指针的定义:
数据类型 *指针变量名;
数据类型 *指针变量名1,*指针变量名2,*指针变量名3,...;
*号在指针变量定义时不能省略,否则就会变成一般变量的定义
指针的运算符
&:获取一个变量的地址
*:在定义一个指针变量时,起到表示作用,表示定义的是一个指针变量,除此之外其它地方都表示获取一个指针变量保存的地址里面的内容
扩展:如果一行中定义多个指针变量的前面都需要加*修饰
int *p;//定义一个int型指针变量
int *p1, *p2, *p3;//定义三个int型指针
int *pa = NULL;//空指针
int *pb;//野指针
void *pd;//万能指针,可以指向任意数据类型
可以给指针指向的数据赋值,如果指针还没有指向地址,则不能给它赋值
3. 指针的引用
指针变量中只能存放地址,与指针相关的两个运算符时&(取地址运算)和*(指针运算)
int *p;//定义一个int型指针变量
int a = 10;
p = &a;
printf("%d\n", a); //输出a的值
printf("%p\n", &a);//输出a的地址
printf("%d\n", *&a); //输出a的值
printf("%p\n", p);//输出a的地址
printf("%p\n", *&p);//输出a的地址
printf("%p\n", &p);//输出p的地址(二级指针地址)
printf("%d\n", *p);//输出a的值
printf("%p\n", &*p);//输出a的地址
总结:
今天为教务管理系统加了两个功能,也算是对之前密码匹配的和数组的复习,下午又学习了指针的概念,指针就是地址,可以将指针变量指向一个变量,那这个变量的地址就给指针变量赋上了值,可以用*指针变量将这个值打印出来,&变量就是这个变量的地址