| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1214 人关注过本帖
标题:猜数字小程序
只看楼主 加入收藏
solocode
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2005-12-2
收藏
 问题点数:0 回复次数:8 
猜数字小程序

题目要求:输入一个四位数,和电脑产生的一个四位数字相比较,这里假设是1352。如果数字相等且位置一样,用A表示;若数字相同位置不同用B表示。例如输入1234,结果输出1A2B。下面的程序经过改过之后的,我希望在“do you want to continue " 后输入'y'在继续执行~~~可是不知道如何返回~~

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include <process.h>
void main()
{
int answer[4],i,j,guess=0,a,b,times=0;
char c;

for(i=0;i<4;i++)
{
srand((unsigned)time(NULL));
answer[i]=rand()%10;
for(j=0;j<i;j++)
{
while(answer[i]==answer[j])
{
answer[i]=rand()%10;
j=-1;
}
}
}

printf("Please guess:\n");

while(a!=4)
{
a=0;
b=0;
times++;
do
{
printf("%-4d",times);
scanf("%d",&guess);
if(guess==0)
exit(0);
}while(guess<0||guess>9999);

for(i=3;i>-1;i--)
{
for(j=0;j<4;j++)
if((int)(guess/pow(10,i))==answer[j])
{
if(i+j==3)
a=a+1;
else
b=b+1;
}
guess=guess-(int)(guess/pow(10,i))*pow(10,i);
}
printf(" %dA%dB\n",a,b);
}

printf("congratulation to you!\n");
printf("you take %d times to guess right!\n",times);
printf("this time generated number is:\n");

for(i=0;i<4;i++)
printf("%3d",answer[i]);
printf("\n");

printf("do you want to continue(y/n)?");
scanf("%c",&c);
if(c=='y')
返回程序重新开始;//关键是这里如何返回,我用goto语句好像不行啊
else
exit(0);

}


[此贴子已经被作者于2005-12-5 18:10:59编辑过]

搜索更多相关主题的帖子: 数字 
2005-12-04 13:25
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 
有几处小错误

[此贴子已经被作者于2005-12-5 0:31:11编辑过]



叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2005-12-04 23:21
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 

改了后可以运行

[此贴子已经被作者于2005-12-5 0:30:34编辑过]


叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2005-12-04 23:23
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 
共三处小错误for(i=3;i>-1;j++)→for(i=3;i>-1;i--)
if((int)(guess/pow(10,i)==answer[j]))→ if((int)(guess/pow(10,i))==answer[j])
getch()应该放在while循环的外面

叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2005-12-05 00:30
solocode
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2005-12-2
收藏
得分:0 

谢谢你了~~

2005-12-05 11:11
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 

#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include <process.h>
void Guess(void);

void main()
{
char c;

Guess();
loop: printf("do you want to continue(y/n)?\n");
c=getch();

if(c=='y')
{
Guess();
goto loop;
}
else
printf("bye.\n");
getch();
return;
}

void Guess(void)
{
int answer[4],i,j,guess=0,a,b,times=0,flag=0;

for(i=0;i<4;i++)
{
srand((unsigned)time(NULL));
answer[i]=rand()%10;

for(j=0;j<i;j++)
{
while(answer[i]==answer[j])
{
answer[i]=rand()%10;
j=-1;
}
}
}

printf("Please guess:\n");

while(a!=4)
{
a=0;
b=0;
times++;

do
{
printf("%-4d",times);
scanf("%d",&guess);

if(guess<0||guess>9999)
{
printf(" please guess again: \n"); //这里修改是为了假如猜出范围 就出现提示,并把猜的次数加一。
flag=1;
times++;
}
else
flag=0;
} while(flag);

for(i=3;i>-1;i--)
{
for(j=0;j<4;j++)
if((int)(guess/pow(10,i))==answer[j])
{
if(i+j==3)
a=a+1;
else
b=b+1;
}
guess=guess-(int)(guess/pow(10,i))*pow(10,i);
}
printf(" %dA%dB\n",a,b);
}

printf("congratulation to you!\n");
printf("you take %d times to guess right!\n",times);
printf("this time generated number is:\n");

for(i=0;i<4;i++)
printf("%3d",answer[i]);
printf("\n");
}

TC下运行过了,可连续猜n个回合,只是有些麻烦


[此贴子已经被作者于2005-12-6 13:32:50编辑过]


叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2005-12-06 00:54
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 

用时间做随机种子,这里会多运行几个回合(因为这样的话种子精度为55ms),直到种子变化


叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2005-12-06 02:33
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 
可以考虑把srand((unsigned)time(NULL));放在 for(i=0;i<4;i++)外面的上一行

叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2005-12-06 13:19
solocode
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2005-12-2
收藏
得分:0 

feng1256,很感谢你的帮助~
我已经把这个程序改进了,我现在把源程序再发一遍~
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include <process.h>
static int n=0;
void main(void)
{
int answer[4],i,j,guess=0,a,b,times=0,f,d,t[4];
char c;

while(!n)
{

for(i=0;i<4;i++) /*开始猜数字游戏*/
{
srand((unsigned)time(NULL));
answer[i]=1+rand()%9; /*产生1~9的随机数*/
for(j=0;j<i;j++)
{
while(answer[i]==answer[j])
{
answer[i]=rand()%10;
j=-1;
}
}
}
loop: printf("Please guess:\n");

while(a!=4)
{
a=0;
b=0;
times++;
do
{
printf("%-4d",times);
scanf("%d",&guess);
if(guess==0) /*判断是否字符*/
exit(0);
}while(guess<1000||guess>9999);

f=guess;
for(i=3;i>-1;i--)
{
t[3-i]=(int)guess/pow(10,i);
guess=guess-(int)(guess/pow(10,i))*pow(10,i);
}

for(i=0;i<4;i++) /*如果输入的四位数有相同数字则重新输入*/
for(j=i+1;j<4;j++)
{
if(t[i]==t[j])
{
clrscr();
times=0;
goto loop;
}
}
guess=f;
for(i=3;i>-1;i--)
{
for(j=0;j<4;j++)
if((int)(guess/pow(10,i))==answer[j])/*比较第一位,相等则继续,
不等则比较下一位*/
{
if(i+j==3) /*位置一样则a+1*/
a=a+1;
else /*位置不一样则b+1*/
b=b+1;
}
guess=guess-(int)(guess/pow(10,i))*pow(10,i);/*开始下一位比较*/
}
printf(" %dA%dB\n",a,b);
}

printf("congratulation to you!\n");
printf("you take %d times to guess right!\n",times);
/* printf("this time generated number is:\n");

for(i=0;i<4;i++)
printf("%3d",answer[i]);
printf("\n"); */

fflush(stdin); /*清除键盘缓冲区*/

printf("do you want to continue(y/n)?");
scanf("%c",&c);
if(c=='y')
{
guess=0;
a=0;
b=0;
times=0;
n=0;
}
else if(c=='n')
{
n=1;
printf("welcome next time!\n");
}
}
getch();
}

2005-12-06 18:06
快速回复:猜数字小程序
数据加载中...
 
   



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

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