1.flash 幸è¿è½¬çä¸å¥è§å¾
2.急求c语言编程题目
3.C学习:uthash使用小结
flash 幸è¿è½¬çä¸å¥è§å¾
没æä½å¼çä¸è¬æ¯æ次æ°ï¼ï¼å½ç¶ä¹ææ¦çå ç´ ï¼ï¼æä½å¼çä¸è¬æ¯ææ¶é´ï¼
ç论ä¸æ²¡æä½å¼çè¯ï¼å¯ä»¥è¿æ ·å®ç°æ¦çï¼æ¯å¦/åºç°Aï¼/åºç°Bï¼å ¶ä»é½åºç°Cï¼é£ä¹å®ç°è¿ä¸ªè¦æ±å¯ä»¥çæä¸ä¸ªä»¥å çéæºæ°ï¼ç¶åç¶åæ ¹æ®ä»è¿è¡å¤æï¼å¦æå°äºï¼é£ä¹åºç°Aï¼å¤§äºå°äºï¼åºç°Bï¼å¤§äºåºç°Cï¼
ä¸é¢çæ£å¸¸çä¸ä½å¼çä¸å¥æ¦ççæï¼å®å ¨é ç³»ç»éæºäº§ç
ä¸è¿å¯¹äºä¸è¬çä¸å¥FLASHï¼åªè¦æ¯éå äºç°å®çéé±çè¯ï¼é½ä¼å¼ä¸äºæ¶é´æè ç¹æ®çä¸å¥æ§å¶æªæ½ï¼åªè¦å¨åé¢çå¤æä¸å å ¥æ¶é´çå¤æå°±å¯ä»¥å®ç°äº
ä¸è¬çFLASHä¸å¥é½åªæ¯ç¨FLASHæ¥æ¾ç¤ºç»æèå·²ï¼çæéæºæ°ç¶åæ¯è¾é½æ¯é åå°çASPæè PHPèæ¬å®ç°çï¼æ以å é FLASHæå¤åªè½è¯´ä½ å¯ä»¥æ²¡æéå¶çå®ç°ä¸åçæ½å¥ï¼ä¹å°±æ¯ä¸åçè°ç¨ASPæè PHPèæ¬ï¼ï¼èä¸å¯è½å®ç°è¯å®æ½ä¸å¥ï¼
急求c语言编程题目
早上看到问题需求,盘源中午用休息时间刚好大半代码,盘源发现问题居然已经采纳了。盘源。盘源。盘源代码完成了。盘源无敌小金边源码测试过了。盘源直接运行。盘源
滚轮实现动态,盘源三角型指针沿着滚盘数字转动,盘源随机停在一个数字上,盘源如果和之前下注的盘源数值一致就是猜中,反之没猜中
你提出的盘源所有功能都实现了,太多了,盘源我截图列举几个说明一下,盘源其它你自己看吧。
是网页源码都是数字可以猜中!!可以猜中!!,我第一次2轮就中,忘记截图了。1/的概率能猜中,有耐心慢慢试,记得充值!
后台还有很多功能,但必须用管理员账户才能进入:
#include <stdio.h>#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#include <conio.h>
#include <time.h>
#define maxMShow //最大下注金额显示字符数,修改该值需要同步修改showDisc函数的格式参数!
typedef struct user
{
char uName[];
char psw[];
int money;//余额
int pay;//历史消费
int win;//历史赢钱
int type;//用户类型->0: 管理员;1:普通玩家
struct user *next;
}USER;
typedef struct disc//圆盘数字
{
char flag;//数字前标识
int num;//圆盘数字
int money;//对应下注金额
char mStr[maxMShow+1];//下注金额字符串形式,为了排面整齐,最多显示个字节
struct disc *next;
}DISC;
void meError(void *p);//内存申请失败
DISC *init();//初始化圆盘,生成链表头指针
void showDisc(DISC *discHead,USER *logUser);//显示圆盘
DISC *bets(DISC *discHead,USER *user);//下注,成功返回下注节点,失败返回NULL。TI的pid源码参数:user:下注人ID;
int regUser(USER **userHead,USER **userTail,char *uName,char *psw,int money,int type);//注册用户,成功返回1,失败返回0。参数:uName:用户名。psw:密码。money:开户金额。type:用户类型0管理员1普通用户
USER * login(USER *userHead,char *uName,char *psw);//登录。登录成功返回用户节点,失败返回NULL
int recharge(USER *logUser);//充值,成功返回1,失败返回0
void showMenu1(DISC *discHead,USER **userHead,USER **userTail);//显示一级菜单
void showMenu2(DISC * discHead,USER *logUser,USER *userHead);//显示二级菜单
void showMenu3(DISC * discHead,USER *logUser,USER *userHead);//显示三级菜单
int roll(DISC *discHead,USER *logUser);//滚动转盘,猜中增加奖金,猜中返回1,没猜中返回0。参数:num=猜的数字,money=下的注
void reDisc(DISC *discHead);//重置转盘,每次滚动后调用
void showUser(USER *userHead,线下陪游源码char *uName);//查看指定玩家账户,参数uName传NULL,查看所有玩家账户
void showProfit(USER *userHead);//统计赌场盈利状况;
int main()
{
DISC *discHead=NULL;
USER *userHead=NULL,*userTail=NULL;
srand(time(NULL));
discHead=init();
showMenu1(discHead,&userHead,&userTail);
return 0;
}
void showMenu1(DISC *discHead,USER **userHead,USER **userTail)//显示一级菜单
{
USER *logUser=NULL;
char uName[]={ 0},psw[]={ 0};
int n,money=0,type;
while(1)
{
n=0;
memset(uName,0,);
memset(psw,0,);
money=0;
type=-1;
system("cls");
printf("1、用户登录\n2、用户注册\n");
scanf("%d",&n);
if(n==1)
{
system("cls");
printf("请输入ID名:"),scanf("%s",uName);
printf("请输入密码:"),scanf("%s",psw);
logUser=login(*userHead,uName,psw);
if(logUser)
showMenu2(discHead,logUser,*userHead);
}
if(n==2)
{
system("cls");
printf("请输入注册的ID名:"),scanf("%s",uName);
printf("请输入注册的密码:"),scanf("%s",psw);
printf("请输入开户的金额(必须大于0):");
while(!money)
scanf("%d",&money);
printf("请选择要注册的用户类型(0=管理员;1=普通用户):");
while(type!=0 && type!=1)
scanf("%d",&type);
regUser(userHead,userTail,uName,psw,money,type);
}
}
}
void showMenu2(DISC *discHead,USER *logUser,USER *userHead)//显示二级菜单
{
int n;
DISC *disc=NULL;
while(1)
{
n=0;
system("cls");
printf("欢迎登录:%s,余额:%d\n",logUser->uName,logUser->money);
printf("1、开始转盘\n2、账户充值\n3、返回上级菜单\n4、后台管理\n");
scanf("%d",&n);
if(n==1)
{
showDisc(discHead,logUser);
disc=bets(discHead,logUser);
if(disc)
showDisc(discHead,logUser);
printf("任意键开始滚动圆盘。。。\n");
getch();
roll(discHead,logUser);
}
if(n==2)
system("cls"),recharge(logUser);
if(n==3)
break;
if(n==4)
{
system("cls");
if(logUser->type!=0)
printf("对不起!您不是管理员,没有该权限!\n按任意键继续。。手机端薄饼源码。\n"),getch(),getch();
else
showMenu3(discHead,logUser,userHead);//后台管理
}
}
}
void showMenu3(DISC * discHead,USER *logUser,USER *userHead)//显示三级菜单
{
int n;
char uName[]={ 0};
while(1)
{
n=0;
system("cls");
printf("1、查看指定玩家\n2、查看所有玩家\n3、查看赌场盈利状况\n4、返回上级菜单\n");
scanf("%d",&n);
if(n==1)
{
printf("请输入要查找的玩家ID:"),scanf("%s",uName);
showUser(userHead,uName);
}
if(n==2)
showUser(userHead,NULL);
if(n==3)
showProfit(userHead);
if(n==4)
break;
}
}
void showProfit(USER *userHead)//统计赌场盈利状况
{
int sumPay=0,sumWin=0;
system("cls");
while(userHead->next)
{
sumPay+=userHead->next->pay;
sumWin+=userHead->next->win;
userHead=userHead->next;
}
printf("玩家共下注%d元,获胜者得到%d元,赌场总获利%d元\n按任意键继续。。。\n",sumPay,sumWin,sumPay-sumWin),getch();
}
void showUser(USER *userHead,char *uName)//查看指定玩家账户,参数uName传NULL,查看所有玩家账户
{
system("cls");
while(userHead->next)
{
if((uName && strcmp(userHead->next->uName,uName)==0)|| !uName)
{
printf("ID:%s,总下注金额%d,总获胜金额%d,当前余额%d\n",userHead->next->uName,userHead->next->pay,userHead->next->win,userHead->next->money);
if(uName)
break;
}
userHead=userHead->next;
}
printf("按任意键继续。。。\n"),getch();
}
USER * login(USER *userHead,char *uName,char *psw)//登录。登录成功返回用户节点,失败返回NULL
{
if(!userHead)
{
printf("错误!无可匹配数据,请先注册!\n按任意键继续。。。\n");
getch();
return NULL;
}
while(userHead->next)
{
if(!strcmp(userHead->next->uName,uName) && !strcmp(userHead->next->psw,psw))
return userHead->next;
userHead=userHead->next;
}
printf("用户不存在或密码输入错误!\n按任意键继续。。。\n");
getch();
return NULL;
}
int recharge(USER *logUser)//充值,成功返回1,失败返回0
{
int money=-1;
if(!logUser)
return 0;
while(money<0)
printf("输入要充值的金额(输入0返回主菜单):"),scanf("%d",&money);
logUser->money+=money;
return 1;
}
int regUser(USER **userHead,USER **userTail,char *uName,char *psw,int money,int type)//注册用户,成功返回1,失败返回0。参数:uName:用户名。psw:密码。money:开户金额
{
USER *user=NULL,*userNew=NULL;
if(!*userHead)
*userHead=(USER *)malloc(sizeof(USER)),(*userHead)->next=NULL,meError(*userHead);
user=*userHead;
while(user->next)
{
if(strcmp(user->next->uName,uName)==0)
{
printf("用户名已存在!请重新输入。\n按任意键继续。。。\n");
getch();
return 0;
}
user=user->next;
}
userNew=(USER *)malloc(sizeof(USER));
meError(userHead);
userNew->money=money;
userNew->pay=0;
userNew->win=0;
userNew->uName[0]=0;
userNew->psw[0]=0;
userNew->type=type;
strcpy(userNew->uName,uName);
strcpy(userNew->psw,psw);
userNew->next=NULL;
if(!((*userHead)->next))
(*userHead)->next=userNew;
else
(*userTail)->next=userNew;
*userTail=userNew;
printf("%s:%s注册成功!\n按任意键继续。。。\n",type?"普通用户":"管理员",uName);
getch();
return 1;
}
DISC *init()
{
int i;
DISC *discHead=(DISC *)malloc(sizeof(DISC)),*discNew=NULL,*discTail=NULL;
meError(discHead);
discHead->next=NULL;
for(i=1;i<=;i++)
{
discNew=(DISC *)malloc(sizeof(DISC));
meError(discNew);
discNew->flag=' ';
discNew->money=0;
discNew->num=i;
discNew->next=NULL;
if(!(discHead->next))
discHead->next=discNew;
else
discTail->next=discNew;
discTail=discNew;
}
return discHead;
}
void reDisc(DISC *discHead)//重置转盘,每次滚动后调用
{
while(discHead->next)
{
discHead->next->flag=' ';
discHead->next->money=0;
memset(discHead->next->mStr,0,sizeof(discHead->next));
discHead=discHead->next;
}
}
int roll(DISC *discHead,USER *logUser)//滚动转盘,猜中增加奖金,猜中返回1,没猜中返回0。参数:num=猜的数字,money=下的注
{
DISC *discHeadSave=discHead;
int i,rnum=0,win,flag;
while(1)
{
discHead->next->flag=;
showDisc(discHeadSave,logUser);
rnum=rand()%+1;
if(rnum==discHead->next->num)
break;
for(i=0;i<;i++);
discHead->next->flag=' ';
if(discHead->next->next)
discHead=discHead->next;
else
discHead=discHeadSave;
}
if(discHead->next->money>0)//如果随机滚到的数字有下注
{
win=discHead->next->money*5;
logUser->money+=win;
logUser->win+=win;
printf("恭喜猜中了,返还5倍!您获得了%d元。\n",win);
flag=1;
}
else
{
printf("对不起!本次没有猜中,再接再厉。\n");
flag=0;
}
reDisc(discHeadSave);
printf("按任意键继续。。。\n");
getch();
return flag;
}
DISC *bets(DISC *discHead,USER *user)//下注
{
int money=0,num=-1;
DISC *disc=NULL;
while(num<1 || num>)
printf("请输入要下注的数字:"),scanf("%d",&num);
while(!money)
printf("请输入要下注的金额(不超过余额且大于0):"),scanf("%d",&money);
if(money>user->money)
{
printf("对不起,您的余额不足,请充值或重新下注!\n按任意键继续。。。\n");
getch();
return NULL;
}
user->money-=money;
user->pay+=money;
while(discHead->next)
{
if(discHead->next->num==num)
{
disc=discHead->next;
break;
}
discHead=discHead->next;
}
disc->money=money;
sprintf(disc->mStr,"%d",disc->money);
return disc;
}
void showDisc(DISC *discHead,USER *logUser)
{
int clo=0;
system("cls");
printf("当前玩家:%s,余额:%d\n",logUser->uName,logUser->money);
while(discHead->next)
{
printf("%c%2d%2s%-s ",discHead->next->flag,discHead->next->num,
discHead->next->money?"<-":" ",discHead->next->money?discHead->next->mStr:" ");//如要修改显示下注金额最大位数,这里%d要改!!!
clo++;
if(clo==3)
clo=0,printf("\n");
discHead=discHead->next;
}
}
void meError(void *p)//内存申请失败
{
if(p==NULL)
{
printf("异常:内存申请失败!回车结束程序!\n");
while(getch()!='\r');
exit(0);
}
}
C学习:uthash使用小结
目录
通过LC题转盘锁为例,结合结构体和字符串匹配来讲解HASH表的建立、查找、增加、删除等。
uthash是一个C语言的hash表实现的开源项目。它以宏定义的方式实现hash表,具有运行速度快、与关键类型无关等优点。uthash使用方便,只需将头文件uthash.h进行include即可使用。
首先建立一个结构体,包含Key键值str字符串以及hash表头hh,hh定义模式固定,直接复制该句即可。
将二维的字符串指针初始化到hash表中,同时应用了查找和添加的功能。
注意:宏调用时会改变指针变量,所以在InitDeadHash()函数最后一个参数要传二级指针进去,并在HASH_FIND()函数第二个参数里,用一级指针解引用来赋值。
以LeetCode . 打开转盘锁题目为例,实际应用的源代码如下:
参考资料