我是C的新手,正在尝试着名的野兔和乌龟任务。我继续得到同样的问题,它是相同的输出,当野兔获胜,它将打印出来。我有一种感觉,我的问题可能在我的display()函数中,但我不确定我哪里出错了。谢谢
H
TORTOISE WINS!!! YAY!!!
当乌龟获胜时。
这是我目前拥有的代码。
#include<stdio.h>
#include<stdlib.h>
int moveTortoise(int* t);
int moveHare(int* h);
void display (int *t, int *h);
int main()
{
printf("BANG!!!!!\nAND THEY'RE OFF!!!!!");
int t, h = 1;
while(t != 70 && h != 70)
{
moveTortoise(&t);
moveHare(&h);
display(&t,&h);
}
if(t > h)
printf("TORTOISE WINS!!! YAY!!!");
else if(h > t)
printf("HARE WINS. YUCH.");
else
printf("IT'S A TIE");
return 0;
}
int moveTortoise(int *t)
{
int i = ((rand() % 10) + 1);
if(i >= 1 && i <= 5) // fast plod
{
*t += 3;
}
else if(i >= 6 && i <= 7) // slip
{
*t -= 6;
}
else if(i >= 8 && i <= 10) // slow plod
{
*t += 1;
}
if(*t < 1)
*t = 1;
else if(*t > 70)
*t = 70;
}
int moveHare(int *h)
{
int i = ((rand() % 10) + 1);
if( i >= 1 && i <= 2) // no move
{
*h = *h;
}
else if( i >= 3 && i <= 4) // big hop
{
*h += 9;
}
else if( i == 5) // big slip
{
*h += 12;
}
else if( i >= 6 && i <= 8) //small hop
{
*h += 1;
}
else if( i >= 9 && i <= 10) // small slip
{
*h -= 2;
}
if(*h < 1)
*h = 1;
else if(*h > 70)
*h = 70;
}
void display(int *t,int *h)
{
for(int i = 0; i < 70; i++)
{
if( i == *t)
printf("T\n");
else if( i == *h)
printf("H\n");
else if( i == *t == *h)
printf("OUCH!!!");
}
}
答案 0 :(得分:2)
您需要在每次运行时对随机数生成器进行不同的播种,以避免在每次执行时获得相同的随机数序列(请参阅srand
)。时间和/或进程ID应该足以进行此练习。
此外,初始化t
(如上面的评论中所述)。
最后,display
中的第三次比较将在错误的时间触发,因为它的评估结果为if ((i == *t) == *h)
;请改用i == *t && i == *h
。