⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 guessnumber.c

📁 一款比较不错的猜数字游戏
💻 C
字号:
#include "stdlib.h"
#include "stdio.h"
#include "time.h"
#include "math.h"
#define X 50
int main(void) 
{ 
    char c[X];
    char A[X]="abcdefghij";
    int i,j,k,x,R;
    int m=strlen(A);
    int n=0;
    /*A为要随机取字符的数组,m为要随机取字符的数组的长度,n为要随机取字符的个数,
    x为中间变量,有时用来存放随机取到的1个数,有时用来存放临时字符数据.*/
    time_t t;
    srand((unsigned) time(&t)); 
 /*产生随机数的时候用时刻变化着的时间t来控制产生的随机数序列在每次运行的时候都不一样。*/
    while(n<=0)
    {
    printf("随机数发生器将从%s中为您随机取字符。\n",A);
    printf("请输入您要随机取的字符的个数(>0的整数):"); 
    scanf("%s",c);
    n=atoi(c);
    }; 
    char B[n],C[n],d[n];
    /*B为对比数组,用来存放随机字符串,C为比较数组,用来存放输入的字符串,d为结果显示数组,用来存放判断结果,
    其中1表示字符和位置都相同,0表示字符相同但位置不相同,空格表示字符和位置都不相同。*/
    
    if(n>0)
    {
        printf("请选择要随机取的字符是否允许重复?\n1(允许);2(不允许)\n请选择:"); 
        scanf("%d",&R);
        if(R==1)
        {
            printf("\n随机产生的%d个字符分别为:",n);
            for(j=0; j<n; j++)
            {
                x=rand()% m;
                B[j]=A[x];
                printf("%c",B[j]);
            }   /*如果允许重复,直接将A中以所取得的随机数为下标的字符存入另一数组B。*/
        }
        else if(R==2)/*如果不允许重复,则执行以下代码段*/
                {
                   if(n<=m) 
                   {   
                       for(k=0,j=0;j<n;)
                       {
                           x=rand()% m;
                           if(k==0)
                           {
                               d[j]=x;
                               B[j]=A[x];
                               j=1;
                               k=1;/*将k设置为0之外的任意数值,用来区别是否为第1次取字符。*/
                           }
/*如果是第1次取数,直接将A中以所取得的随机数为下标的字符存入另一数组B,然后更新已取字符个数,将已取字符个数置为1。*/  
                           for(i=0;i<=j;i++)
                           {
                                   if(d[i]==x)
                                       break; 
                                   if(d[i]!=x&&i==j)
                                   {
                                        d[i]=x;
                                        j++;
                                        B[j-1]=A[x]; 
                                        break;
                                   } 
 /*判断随机取到的数是否重复,如果重复则跳出循环,如果不重复,
 判断是否已与全部已取得的随机数比较完毕,如果比较完毕的话,然后更新已取字符个数, 
 将A中以所取得的随机数为下标的字符存入另一数组B中。*/                              
                           }         
                      }
                      printf("\n随机产生的%d个字符分别为:",n);
                      for(i=0;i<n;i++)
                          printf("%c",B[i]);   
                   }
                   else
                   {
                      printf("输入错误!\n您要取的字符个数>数组中字符个数,因此所取的字符不可能不重复。\n"); 
                      exit(0);
                   }
               } 
        else
        {
            printf("输入错误!\n"); 
            exit(0);
        }
     }
     
    /*初始化对比数组B,用来存放随机取到的字符串*/  
    printf("\n要对比的字符串为:"); 
    for(j=0; j<n; j++)
        printf("%c",B[j]);
    printf("\n备注:比较结果中1表示字符和位置都相同,0表示字符相同但位置不相同。\n"); 
    while(1)
    {      
        printf("\n请输入%d个字符进行比较:",n);
        scanf("%s",C);   
        for(j=0; j<n; j++)
            d[j]=' ';/*初始化结果显示数组*/  
        for(i=0;i<n;i++)/*具体的字符和位置的比较,将相应位置设置为1或0。*/
        {
            if(B[i]==C[i])/*判断字符和位置是否都相同,都相同结果显示数组中标志为1。*/
               d[i]='1';
        }
        for(i=0;i<n;i++)    
        {
            for(j=0;j<n;j++)
            {    
                if(B[i]==C[j])/*如果字符相同且已标志为1,则与跳出本次循环,用下一个进行比较;如果字符相同但未标志为1,则标志为0。*/
                {
                    if(d[i]=='1')
                    {
                        i++;
                        continue;
                    }  
                    else  
                    {
                        d[i]='0';
                    }              
                }           
            }  /*内层for循环结束。*/      
        }/*外层for循环结束。*/ 
        for(i=0;i<n;i++)
           for(j=i+1;j<n;j++)
           {
               if(d[i]<d[j])
               {
                   x=d[i];
                   d[i]=d[j];
                   d[j]=x;
               }   
           }  
        /*对结果显示数组中的1、0和空格进行具体的排序(从大到小), 
        要求显示格式:1在前,0在后,空格在最后但是显示不出来。*/   
        printf("比较结果:");
        for(i=0;i<n;i++)
                printf("%c",d[i]);
        for(i=0;i<n;i++)
        {
            if(d[i]=='1'&&i==(n-1))
            {
                printf("\n恭喜您!输入正确!\n");                       
                exit(0);   
            }    
            else
            {
                if(d[i]=='1')
                       continue;     
            }
       } /*判断是否全为1*/                 
   };
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -