【问题标题】:Hare and Tortoise printing out same outputHare 和 Tortoise 打印出相同的输出
【发布时间】: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

标签: c function loops


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-31
    • 2022-08-05
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    • 2022-07-21
    • 2018-09-05
    相关资源
    最近更新 更多