用c语言做个报数游戏和验证码系统

本文介绍如何使用C语言创建一个报数游戏,其中包含变长数组和敏感数字,直到只剩一人获胜。同时,还展示了实现验证码系统的简单步骤,验证码不区分大小写,连续错误三次则退出。

题目是有m个人玩游戏,n为不能说的数字,说到n的人退出游戏,下一个人从新报数,只要游戏剩下最后一个人为止时,游戏结束。

从要求从可以看出人数不确定,是一个变成数组。

定义变长数组,从键盘输入人数,并输入不能说的数,然后将人数和敏感数字传入函数。

先用for循环给每位玩家一个标志,表示玩家的参赛资格。

使用一个while循环,条件判断当只剩下最后一个人时,退出循环。最后使用一个for循环将还有参赛资格的玩家选出来,就是最后的赢家

代码演示:

游戏运行过程:  1  2  3  4  5,如  2  为不能说的数字,第一次报数为  1  2  1  2  1,则2  4退出游戏,第二次参加游戏的人为  1  3  5 ,根据上一次报数,这次报数是  2  1  2。最后剩下的人是三号

不熟练的小伙伴,可以不使用变长数组,和从键盘输入。可以直接定义

代码如下:

#include <stdio.h>

void good_luck(int arr[],int x,int len)
{  
   int k=0,count=0,i;
   for(i=1;i<=len;i++)
   {
        arr[i]=1;           //给每个玩家参赛资格
   }
   
   while(k!=len-1)         //判断当玩家只剩下一个人时退出游戏
   {
      for(i=1;i<=len;i++)
      {
        if(arr[i] == 1)    //判断玩家是否有参赛资格
        {
            count++;       //报数
            if(count%x == 0)            //判断是否报到敏感数
            {
                arr[i]=2;               //取消玩家资格
                k++;                    //退出人数+1
                count =0;               //下一个人从新开始报数
            }
        }
      }
   }
   for(i=1;i<=len;i++)
   {
      if(arr[i] == 1)
      {
        printf("游戏最后剩下的玩家是%d号",i);
      }
   }
}

int main()
{   
    int num,x,len;
    printf("参与游戏的人数:");
    scanf("%d",&num);
    int arr[num];

    printf("不能报的数:");
    scanf("%d",&x);

    len=sizeof(arr)/sizeof(int);
    
    good_luck(arr,x,len);
}

验证码小程序,条件验证码无视大小写比较,并输入错三次退出输入。

第一步使用for循环生成一个六位数的验证码,第二步从键盘输入验证码,第三步进行比较

可以使用函数 strcasecmp ,不知道的小伙伴可以去百度查询一下使用方法。

代码演示如下:

代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <unistd.h>

char get_srand(char *ch);
char compare(char *ch,char *ch1);
char pass(char *ch1);

int main()
{
    printf("请输入验证码进入系统\n");
    char ch[7] = {0};
    char ch1[7] = {0};

    get_srand(ch);               //生成验证码
    compare(ch,ch1);        //判断字符串是否相同

    return 0;
}

char get_srand(char *ch)   //获取随机数函数
{
    int i,num;
    srand((int)time(0)); 
    
    for(i = 0; i < 6; i++)
    { 
        num = rand()%3+1;  //产生三种类型的字符
        switch (num)
        {
            case 1:
                *(ch+i)=48+rand()%9+1;     //产生字符'0'到'9'
                break;
            case 2:
                *(ch+i)=65+rand()%26;     //产生字符'A'到'Z'
                break;
            case 3:
                *(ch+i)=97+rand()%26;     //产生字符'a'到'z'
                break;
            default:
                break;
        }               
    }
    printf("验证码为:%s",ch);  
}

char compare(char *ch,char *ch1)        //字符串比较函数
{
    int i = 3;
    while(i>0)
    {
        pass(ch1);
        if(strcasecmp(ch,ch1) == 0)
        {
            printf("-----验证码正确!-----\n");
            sleep(1);
            printf("---欢迎使进入系统---");
            return 0;
        }
            if(i == 1)
            {
                printf("\n-----用户锁定!-----\n");
                return 0;
            }

            printf("输入错误,验证码重新生成!\n");
            get_srand(ch);
            i--;      
    }      
}

char pass(char *ch1)      //输入验证码函数
{
    printf("\n请输入验证码:");
    scanf("%s",ch1);
    printf("\n");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值