| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
大量收QQ微信精准粉/交友粉,非诚勿扰千里之行 始于足下
共有 414 人关注过本帖
标题:输出的随机数,为啥有重复的,,不知道哪里错了,,
只看楼主 加入收藏
dzdzdzd
Rank: 1
等 级:新手上路
帖 子:6
专家分:7
注 册:2017-11-28
结帖率:0
  已结贴   问题点数:20  回复次数:2   
输出的随机数,为啥有重复的,,不知道哪里错了,,
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <time.h>
/*定义变量及函数*/
void c_input(char *str)
{
 int i,j;
/*检测输入是否合法*/
input:for(i=0;i<5;i++)
 {
  str[i]=getch();
  putchar(str[i]);
 }
 putchar('\n');
 for(i=0;i<5;i++)
 {
  if(str[i]<'0'||str[i]>'9')
  {
   printf("输入错误,请重新输入:");
   goto input;
  }
  for(j=0;j<i;j++)
  {
   if(str[i]==str[j])
   {
    printf("输入错误,请重新输入:");
    goto input;
   }
  }
 }
}
/*显示帮助信息*/
void c_help()
{
system("cls");
printf("\t\t\t\t※游戏帮助※");
printf("\n    本游戏由电脑自动生成五个不重复数字,由玩家来猜;游戏开始后,");
printf("\n    玩家输入五个不重复的数字,输入后会有提示XAYB, X表示有几个");
printf("\n    数字与答案数字相同且位置相同。 Y表示有几个数字与答案数字相");
printf("\n    同但位置不正确。例如:答案数字是3792,如果输入9786,则会提");
printf("\n    示1A1B。玩家总共有十次机会来猜数字。");
printf("\n\n\n\t\t\t\t\t\t祝您游戏愉快!");
printf("\n\n请按任意键返回主菜单……");
getch();
    return;
}
/*游戏部分*/
/*定义变量及函数*/
void c_game(const char *temp)
{
 int i,j,ci,score=0;
 char in[5];
 char out[5]="0A0B";
 for(ci=0;ci<10;ci++)
 {
  printf("第 %d 次输入,你总共有10次机会:",ci+1);
  c_input(in);
  for(i=0;i<5;i++)
  {
   if(in[i]==temp[i])
   {
    out[0]++;
   }
   else
   {
    for(j=0;j<5;j++)
    {
     if(in[i]==temp[j])
     {
      out[2]++;
     }
    }
   }
  }
  printf("%s\n",out);
  if(strcmp(out,"5A0B")==0)
  {
   score=score+100;
   printf("恭喜您,加一百分!\n您的总分为%5d,score");
   printf("\n请按任意键返回主菜单……………");
   getch();
   return;
  }
  out[0]='0';
  out[2]='0';
 }
 printf("很遗憾,您的机会用完了,再接再厉哦!");
 printf("\n请按任意键返回主菜单……………");
 getch();
}

void c_rand()
{
 int i,j;
 char data[]="0123456789";
 char temp[5];
 system("cls");
 printf("\t\t\t\t※猜数字游戏中※\n\n");
 /*电脑自动生成5个不重复数字*/
 for(i=0;i<5;i++)
 {
  j=rand()%(10-i);
  temp[i]=data[j];
  data[j]=data[10-i-1];
printf("%d",j);
 }
 c_game(temp);
}


void c_printf()
{
 char temp[4];
/*用户自己设置数字来测试游戏*/
 system("cls");
 printf("\t\t\t\t※测试模式※\n\n");
 printf("请输入测试数据:");
 /*检测用户输入的数据是否符合要求*/
 c_input(temp);
 /*系统根据玩家设定的数据展开游戏测试*/
 system("cls");
 printf("\t\t\t\t※测试模式※\n\n");
 c_game(temp);
}

/*主目录*/
void main()
{
 srand(time(NULL));
  while(1)
  {
  char choice;
  system("cls");
  printf("\n\n                                                                   猜数字游戏                                                                       ");
  printf("\n\t\t\t\t1、【进入游戏】\n");
  printf("\n\t\t\t\t2、【测试模式】\n");
  printf("\n\t\t\t\t3、【游戏帮助】\n");
  printf("\n\t\t\t\t4、【退出游戏】\n");
  printf("\n请选择(1-4) : ");
  choice=getchar();
  switch(choice)
   {
   case '1':c_rand();break;
   case '2':c_printf();break;
   case '3':c_help();break;
   case '4':
   {
   char ch;
           printf("你确定要退出吗?(y/n):");
   fflush(stdin);
           ch=getchar();
           if(ch=='y'||ch=='Y')exit(0);
           else continue ;
       }
   }
  }
 }
2017-11-28 17:56
丶木清丶
Rank: 2
等 级:论坛游民
帖 子:7
专家分:22
注 册:2017-11-27
  得分:20 
104行的rand函数可以生成重复的数字,这个地方要写一个筛选的程序。
2017-11-29 23:01
stop1204
Rank: 9Rank: 9Rank: 9
来 自:福建省
等 级:贵宾
威 望:22
帖 子:295
专家分:1151
注 册:2013-9-8
  得分:0 
srand(time(0) 吧

hl928452957@gmail点com

2017-12-07 02:37







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025823 second(s), 8 queries.
Copyright©2004-2018, BCCN.NET, All Rights Reserved