一次运行三个功能?

时间:2019-04-17 03:02:44

标签: c++ function

C ++ 为学校解决问题,在比赛中奔跑三匹马,谁获得第一名就是赢家。这三匹马应该像这样

1|--------H------|
2|-------H-------|
3|---------H-----|

但是我的代码正确运行了程序(生成1到100之间的随机数,如果该数字小于50,则将马匹向上移动1个空格)。但它先跑第一匹马,然后跑第二匹和第三匹。

试图对此进行查找,但是似乎没有一种方法有效(使用C ++代码块(最新版本的Windows 10)。

srand(time(NULL));
Horse1();
Horse2();
Horse3();

Github文件:https://gist.github.com/EthanA2020/f16a699f1b8136a1da0350ab48acdda0

2 个答案:

答案 0 :(得分:2)

我认为您的问题不是函数类型,而是程序的结构。无论您如何编程,一个操作都必须先进行下一个操作。开发人员通过并排运行对象的每个操作(在您的情况下为马运动)并稍后检查结果来进行处理。

例如,让我们使用您的骑乘场景:

while "all horses" are less than "finish"
     horse 1 moves
     horse 2 moves
     horse 3 moves

我确定您熟悉循环,因此我们将在这里使用它。必须存在一些设定的距离才能确定一匹马何时完成。因此,当所有马匹的距离小于该值时,您将要继续循环。在每个循环中,每匹马的运动值都必须改变或不改变(由您的随机运动函数确定)。

现在,当while循环结束时,您可以确定至少有一匹马越过了终点线。所有操作均已完成,并且您拥有马匹位置数据集。在这一点上,您可以查看哪些马匹已经完成(我说的是马匹复数,因为有可能一匹以上甚至三匹马同时完成,因此请务必在最后考虑这一点)。

这样,您的程序结构应类似于:

while "all horses" are less than "finish"
     horse 1 moves
     horse 2 moves
     horse 3 moves
//movement of horses complete
check and print the horses with a movement value of "finish"

答案 1 :(得分:-4)

我认为您应该这样做:

while (!horse(rand() % 100)) {
    usleep(100);
}

horse(int n)将马n移动1的位置,如果到达终点,它将返回true(以结束比赛)。如果将无效的n(只有1到3有效)传递给它,则不会执行任何操作。