野兔和乌龟打印出相同的输出

时间:2018-02-04 21:18:52

标签: c function loops

我是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!!!");

    }
}

1 个答案:

答案 0 :(得分:2)

您需要在每次运行时对随机数生成器进行不同的播种,以避免在每次执行时获得相同的随机数序列(请参阅srand)。时间和/或进程ID应该足以进行此练习。 此外,初始化t(如上面的评论中所述)。 最后,display中的第三次比较将在错误的时间触发,因为它的评估结果为if ((i == *t) == *h);请改用i == *t && i == *h