输出的随机数,为啥有重复的,,不知道哪里错了,,
#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 ;
}
}
}
}