源码如下:
/* File: guess.c */
#include <stdio.h> /* standard input & output support */
#include <stdlib.h> /* srand() rand() */
#include <time.h> /* time() */
/* 宏定义 */
#define NUMBER_LENGTH 5 /* 随机数长度 */
#define NUMBER_LIMIT 10 /* 随机数限制, 每一位0-9 */
#define INPUT_LENTH 128 /* 输入缓冲区大小 */
char goal[NUMBER_LENGTH] = {0} /* 保存随机数 */
char flag[NUMBER_LIMIT] = {0} /* 保存随机数标志, 保证不重复 */
char input[INPUT_LENTH] = {0} /* 保存输入 */
/* 初始化用于保存数据的数组 */
void initData()
{
int i = 0
while (i < NUMBER_LENGTH)
goal[i++] = 0
i = 0
while (i < NUMBER_LIMIT)
{
flag[i++] = 0
}
}
/* 初始化用于保存缓冲区的数组 */
void initBuffer()
{
int i = 0
while (i < INPUT_LENTH)
input[i++] = 0
}
/* 显示猜测结果 */
void display()
{
int count = 0
int i = 0
while (i < NUMBER_LENGTH)
{
if (input[i] == goal[i])
{
printf("%c", 'o')
count++
}
else
{
printf("%c", 'x')
}
i++
}
printf("\nRIGHT: %d bit(s)\n", count)
if (count == NUMBER_LENGTH)
{
printf("You win! The number is %s.\n", goal)
exit(0)
}
}
/* 生成随机数 */
void general()
{
/* 以时间作为时间种子保证生成的随机数真正具有随机性质 */
srand((unsigned int)time(NULL))
int i = 0
while (i < NUMBER_LENGTH)
{
char tmp
do
{
tmp = '0' + ((i != 0) ? (rand() % 10) : (1 + rand() % 9))
} while (flag[tmp] != 0)
flag[tmp] = 1
goal[i++] = tmp
}
}
/* 输入方法,用于猜测 */
void guess()
{
printf("Please input the number you guessed:\n")
scanf("%s", input)
display()
initBuffer()
}
/* 主函数,程序主框架 */
int main (int argc, const char * argv[])
{
initData()
initBuffer()
general()
while (1) guess()
return 0
}
==============================================
运行结果见附图,希望我的回答能够对你有所帮助。
加了得分榜,没写排序,没时间了。自己加一下就OK#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>//以上的是要用到的头文件
int score=0
void SELECT(int)
void Guess(int,int)
void Select()
void letsgo()
void NB(int)//以上的是函数原型
struct PLAYER
{
char name[10]
int plscore
}
void save()
{ printf("您的得分是%i",score)
PLAYER player
printf("请输入姓名:")
scanf("%s",player.name)
player.plscore=score
FILE *fp
if((fp=fopen("record.txt","ab"))==NULL)
{
printf("不能打开文件!")
exit(0)
}
fwrite(&player,sizeof(PLAYER),1,fp)
printf("记录保存完毕!")
fclose(fp)
}
void print()
{
printf("分数榜:")
FILE *fp
if((fp=fopen("record.txt","rb"))==NULL)
{
printf("不能打开文件!")
exit(0)
}
PLAYER player
while(fread(&player,sizeof(PLAYER),1,fp)==1)
{
printf("\n姓名:%s\n",player.name)
printf("分数:%i\n",player.plscore)
}
fclose(fp)
}
void main()
{
char end
printf(" \t\t欢迎光临!!\n\t 在这里我将来测试你的运气!\n")
printf(" 请你猜下数字,但机会就只有三次!!\n")
printf("\n 1、开始游戏^__^\n 2、我是倒霉鬼,我不玩\n 3、查看分数榜")
printf(" 请选择1或2\n")
Select()
printf("\n按任意键退出")
fflush(stdin)
end=getchar()
if(score>0)
save()
printf("Thanks For Playing \2 886\n")
}
void Select()
{
int s
static int lihai=0
fflush(stdin)
scanf("%d",&s)
switch(s)
{
case 1:
letsgo()break
case 2:
printf("唉,你不想玩,我就不逼你咯\n")exit(0)
case 3:print()
break
default:
lihai++
if(lihai==3||lihai==5)
{
NB(lihai)
break
}
printf("你输入的是什么啊!重新输入<1 或 2 >\n ")
Select()
}
}
void letsgo()
{
int select
printf("请你选择猜数字的难度\n ")
printf("1、简单->猜测 0 到 9 的数字\n ")
printf("2、一般->猜测 0 到 99 的数字\n ")
printf("3、困难->猜测 0 到 999 的数字\n ")
printf("<请不要乱选!!>\n")
scanf("%d",&select)
switch(select)
{
case 1:SELECT(10)break
case 2:SELECT(100)break
case 3:SELECT(1000)break
case 4:print()
default:
{
printf("请不要乱选!!\n")
letsgo()
}
}
}
void NB(int l)
{
char a[20]
static int jihui=0
printf("\n老大!我服了你,%d 次都输入错误。\n",l)
printf("\n<可能你在捣乱~~>\n")
printf("(如果不想结束,请输入[sorry]<中括号内的>否则结束游戏)\n")
fflush(stdin)
gets(a)
if (strcmp(a,"sorry")==0||strcmp(a,"SORRY")==0)
{
jihui++
if(jihui==2)
{
printf("\n死性不改。道歉也没有用了!\n")
goto end
}
printf("好吧。给你次机会<请输入 1 或 2 >\n ")
Select()
}
end:
printf("")
}
void SELECT(int n)
{
int num
srand((unsigned)time(NULL))
num=rand()%n
if(n==10)
{
n=3
printf("\n你有 %d 次猜测的机会\n",n)
}
if(n==100)
{
n=5
printf("\n你有 %d 次猜测的机会\n",n)
}
if(n==1000)
{
n=7
printf("\n你有 %d 次猜测的机会\n",n)
}
Guess(num,n)
}
void Guess(int num,int n)
{
int search,k,o
static int i=1
char ans
if(n==3)
k=10
if(n==5)
k=100
if(n==7)
k=1000
o=(num-k/1)%k
if(o<0)
o=0
printf("\n请猜这个数是多少(在<%d>到<%d>):",o,(k/5+num)%k)
fflush(stdin)
scanf("%d",&search)
if(num>search)
printf("\n小了\n")
if(num<search)
printf("\n大了\n")
if(num==search)
{
printf("\n恭喜您了!你在第 %d 次猜对了\n",i)
score+=10
printf("是否继续<y / n>:\n")
fflush(stdin)
ans=getchar()
if(ans=='y'||ans=='Y')
{
i=1
letsgo()
}
}
else
{
i++
if(i<=n)
Guess(num,n)
else
{
printf("\n你的 %d 次机会已经没有了!!,答案是 %d \n",i-1,num)
printf("是否继续<y / n>:\n")
fflush(stdin)
ans=getchar()
if(ans=='y'||ans=='Y')
{
i=1
letsgo()
}
}
}
}
满意请采纳。
//小游戏:猜数字 随机一个1-100之间的数,根据数据输入进行提示#include <stdlib.h>
#include <time.h>
int main(void){
int value=0
int num=0
srand((unsigned int) time(NULL))
num=rand()%100+1//1-100
while(1){
scanf("%d",&value)
if(num>value){
printf("您猜小了\n")
}
else if(num<value){
printf("您猜大了\n")
}
else if(num=value){
printf("恭喜您猜对了\n")
break
}
}
return 0
}