高手些,帮个忙,看下我这段程序哪里出了问题,猜四字游戏。

asd168971681111 2012-07-02 06:57:06
#include<stdio.h>
#include <string.h>
#include <time.h>
#include <conio.h>
#include <stdlib.h>
int init()
{
srand(time(0));
}
int *creat()
{
int flag[10]={0};
int numbe2[4]={0};
int tem=0,i=5,j=4;

while(i)
{
tem=rand()%10;
if(flag[tem]==0)
{
numbe2[j]=tem;
flag[tem]=1;
j--,i--;
};
}
return numbe2;
}
int check(int *numbb,int *numbb2)
{ int x=0,y=0,m,n;
for( n=0;n<4;n++)
for( m=0;m<4;m++)
{ if(numbb[n]==numbb2[m])
{
if(n==m)
{
x++;
}
else y++;
}

}
if(x==4)
{
printf("恭喜你答对了!猜中的数字是%d%d%d%d",numbb[0],numbb[1],numbb[2],numbb[3]);
return x;
}

else{
printf("%dA%dB",x,y);
return 0;
}

}
void start()
{ int *numb;
int numb2[4];
char numb3='\0';
int i=0;
numb=creat();
while(i<7)
{

fflush(stdin);
printf("请输入4个数,这是你第%d次猜\n",i+1);
while(1)
{
if((scanf("%d%d%d%d",&numb2[0],&numb2[1],&numb2[2],&numb2[3])==4)&&(numb3==getchar()))
{
break;
}

else {
fflush(stdin);
printf("输入错误,请重新输入\n");

}
printf("按Q/q退出\n");
if('q'&&'Q'==getch())
exit(0);

}
if(check(numb,numb2))
{

break;
}
else
{
i++;
continue;
}
}


}
int main(void)
{
init();
start();
}
...全文
63 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
tongzhipeng5699 2012-07-02
  • 打赏
  • 举报
回复
除了1楼所指出的问题以外,还有一个错误。
判断'q' ‘Q'的时候有误。

#include "StdAfx.h"
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <conio.h>
#include <stdlib.h>
int init()
{
srand(time(0));
return 0;
}
int *creat()
{
int flag[10]={0};
int* numbe2=(int*)malloc(sizeof(int)*4);
int tem=0,i=5,j=4;

while(i)
{
tem=rand()%10;
if(flag[tem]==0)
{
numbe2[j]=tem;
flag[tem]=1;
j--,i--;
};
}
return numbe2;
}
int check(int *numbb,int *numbb2)
{ int x=0,y=0,m,n;
for( n=0;n<4;n++)
for( m=0;m<4;m++)
{ if(numbb[n]==numbb2[m])
{
if(n==m)
{
x++;
}
else y++;
}

}
if(x==4)
{
printf("恭喜你答对了!猜中的数字是%d%d%d%d",numbb[0],numbb[1],numbb[2],numbb[3]);
return x;
}

else{
printf("%dA%dB",x,y);
return 0;
}

}
void start()
{ int *numb;
int numb2[4];
char numb3='\0';
int i=0;
numb=creat();
while(i<7)
{

fflush(stdin);
printf("请输入4个数,这是你第%d次猜\n",i+1);
while(1)
{
if((scanf("%d%d%d%d",&numb2[0],&numb2[1],&numb2[2],&numb2[3])==4)&&(numb3==getchar()))
{
break;
}

else {
fflush(stdin);
printf("输入错误,请重新输入\n");

}
printf("按Q/q退出\n");
char c=getch();
if('q'==c||'Q'==c)
exit(0);

}
if(check(numb,numb2))
{

break;
}
else
{
i++;
continue;
}
}


}
int main(void)
{
init();
start();

return 0;
}
asd168971681111 2012-07-02
  • 打赏
  • 举报
回复
我把保存四位随机数的数组和输入四数的数组都弄成全局变量。还是有问题,连按Q退出都不行。而且输入错误,按回车也有问题,应该是代码逻辑部分有问题
asd168971681111 2012-07-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

create里的返回有问题
你直接返回局部变量number2的地址,他会在create执行完后被释放,所以里面的数据不安全,随时可能被修改
建议你把
int number2[4]
改为
int *number2;
number2=(int*)malloc(sizeof(int)*4);
[/Quote]
恩。能不能用把number2弄成全局变量。弄成全局变量后,还是不行。按Q也没反应。还有就是验证是否输入是否正确也有问题。
PANHL97 2012-07-02
  • 打赏
  • 举报
回复
create里的返回有问题
你直接返回局部变量number2的地址,他会在create执行完后被释放,所以里面的数据不安全,随时可能被修改
建议你把
int number2[4]
改为
int *number2;
number2=(int*)malloc(sizeof(int)*4);

69,379

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧