完善后的猜数字游戏——仍有个小问题
提示: 作者被禁止或删除 内容自动屏蔽
/************************************************************* 把你的程序加了点东西,试了一下,现在应该是可以了。 不过觉得你的程序好象有点儿乱。另外,如果熟悉这个游戏 的人还可以,如果不熟悉的人,你也没个说明啥的,让人家怎么 玩儿呢? 一家之言,谨供参考。 *************************************************************/ #include <stdlib.h> #include "stdio.h" #include<time.h> #define X {char c;c=getchar()!='\n';} int answer[4]; void main() { void produce(); void guessing(); void playagain(); produce(); guessing(); playagain(); } void produce()/*产生随机的一个四位数*/ { int i,j; for(i=0;i<=3;i++) { srand(time(0)); answer[i]=rand()%10; for(j=0;j<i;j++) { while(answer[i]==answer[j]) { answer[i]=rand()%10; j=-1; } } if(answer[0]==0)/*如果这个四位数的千位数为0则重新产生*/ { i=-1; continue; } } } void guessing() { int m,guess[4],x,y,i,j,k,l,times=1; while(x!=4) { x=0,y=0; printf("\nguess the num:"); printf(" %d\n",times); scanf("%d",&m);/*猜数*/ if(m<1000||m>9999)/*不合法输入或退出*/ playagain(); while(m>=1000&&m<=9999)/*answer和guess数组中一个个比较*/ { for(i=3;i>=0;i--)/*求guess数组的每一个元素的值*/ { guess[i]=m%10; m=m/10; } for(j=0;j<4;j++) { if(answer[j]==guess[j]) x++; } for(k=0;k<4;k++) for(l=0;l<4;l++) if(answer[k]==guess[l]) y++; printf("%dA%dB",x,y-x);/*x是位置和数字都猜对的个数, (y-x)是数字对了,但位置不对的个数*/ times++; } if(x==4) {printf("\ncongratulations!,you only need %d times to guess it ",times-1); playagain();/*重复玩一次*/ } } } void playagain() { char key; printf("\nPress 'q' to quit:"); key=getchar(); X; if(key=='q') { printf("\n quit game?(y or n)"); key=getchar(); X; if(key=='y') exit(0); else if(key=='n')/*重复再玩一次*/ { produce(); guessing(); } } }