【发布时间】:2018-02-04 21:18:52
【问题描述】:
我是 C 的新手,正在尝试著名的 Hare and Tortoise 作业。我一直遇到同样的问题,当野兔获胜时,它的输出是相同的,它会打印出来。我有一种感觉,我的问题可能出在我的 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!!!");
}
}
【问题讨论】:
-
你没有初始化
t -
在moveHare函数中,不要做:*h = *h;为什么这个?如果您不移动,只需删除“如果”即可。
-
野兔的“大滑”看起来更像是一个大跳而不是滑。你加12;滑倒意味着减去 12。
-
@StoryTeller 我做到了,但现在野兔每次都以相同的输出获胜。
-
表示您需要debug your program。