用c语言的一道编程题 要用到调用函数
附加功能:允许用户三次输入机会,输入正确,处理方法如上,输入不正确,提示“用户名和密码不正确,请重新输入”,如果三次输入都失败则,提示“登录失败,账户锁定”结束程序。
提示:
char username[10][10]={"tonny","andy","alice","nancy","mike",
"kate","brandy","lucy","candy","molly"};
Char password[10][10]={"000000","111111","222222","333333",
"444444","555555","666666","777777","888888","999999"};
int rmb[10]={345,567,1789,2098,4567,17890,2345,12,0,10023};
username数组中存放了10个账户名,password数组中存放对应的10个人的密码,rmb数组中存放这10个账户的人民币余额。 展开
题目要求用数组分别保存所有用户名密码及余额(用结构更好)。并采用函数调用的方式。
我将程序需求分解3个函数:
一、登录模块,对应这个题目就是给数组初值。(你想手动输入注册,改这个函数)。
说明:二维数组名是指向数组的指针,我在这个代码中利用传递指针地址及静态变量实现调用函数给主函数变量赋值。如你无法理解,直接将3个数组定义为全局变量。
二、验证用户名密码单独一个函数。
三、登录模块调用验证函数,处理返回结果。
下面是代码:
#include <stdio.h>
#include <string.h>
#define MU 10//最大用户数量
#define MS 11//最大字符串长度-1
void init(char (**)[MS],char (**)[MS],int **);//初始化三个数组(想写注册用这个改)。参数12:用户名数组及密码数组指针的地址,参数3:余额数组指针的地址
int checkUInfo(char [MS],char [MS],char [][MS],char [][MS]);//验证用户名密码。参数12为输入的用户名密码,参数23为用户名及密码的数组。成功返回索引,否则返回-1
int login(char [][MS],char [][MS],int [MU]);//登录模块,成功返回1,失败返回0。参数123分别为用户名数组,密码数组,余额数组
int main()
{
int *rmb=NULL;
char (*username)[MS]=NULL,(*password)[MS]=NULL;
init(&username,&password,&rmb);
if(!login(username,password,rmb))printf("登录失败,用户锁定\n");
return 0;
}
void init(char (**pUName)[MS],char (**pPwd)[MS],int **pRmb)
{
static char username[MU][MS]={"tonny","andy","alice","nancy","mike","kate","brandy","luck","candy","molly"};
static char password[MU][MS]={"000000","111111","222222","333333","444444","555555","666666","777777","888888","999999"};
static int rmb[MU]={345,567,1789,2098,4567,17890,2345,12,0,10023};
*pUName=username;
*pPwd=password;
*pRmb=rmb;
}
int login(char uName[][MS],char pwd[][MS],int rmb[MU])
{
char uInput [MS],pInput [MS];
int cnt=0,index;
while(cnt<3)
{
printf("请输入用户名:"),scanf("%s",uInput);
printf("请输入密 码:"),scanf("%s",pInput);
//--需要输入验证在这里自行添加
index=checkUInfo(uInput,pInput,uName,pwd);
if(index!=-1)
{
printf("登陆成功!账户余额为:%d\n",rmb[index]);
return 1;
}
else
{
printf("用户名和密码不正确,请重新输入!\n");
cnt++;
}
}
return 0;
}
int checkUInfo(char uInput [MS],char pInput [MS],char uName[][MS],char pwd[][MS])
{
int i,flag=-1;
for(i=0;i<MU;i++)
if(strcmp(uInput,uName[i])==0 && strcmp(pInput,pwd[i])==0)
{
flag=i;
break;
}
return flag;
}