【发布时间】:2015-06-18 13:51:41
【问题描述】:
我正在构建一个模拟龟兔赛跑的程序。我这样做的方式是创建一个大小为 70 的 '_' 数组来模拟赛道。然后我创建了 2 个指针,char *harePtr 和 char *tortoisePtr,它们指向该数组中的元素(每个都从 [0] 开始) 指针指向的数组中的元素我也试图更改为 'T ' 和 'H' 来模拟他们在赛道上的位置。
从那里我开发了算法,根据随机数生成器确定每个人将采取的行动。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 70
enum winner {TORTOISE, HARE};
int raceRunner (char wRaceTrack[], void (*moveHare)(char *harePtr, int i), void (*moveTortoise)(char *tortoisePtr, int i));
void moveHare (char *harePtr, int i);
void moveTortoise ( char *tortoisePtr, int i);
int main() {
char racetrack [SIZE];
size_t i;
for (i = 0; i < SIZE; i++)
racetrack[i] = '_';
int winner;
winner = raceRunner(racetrack, moveHare, moveTortoise);
if (winner == 1)
printf("The hare won!");
if (winner == 2)
printf("The tortoise won!");
}
int raceRunner (char wRaceTrack[], void (*moveHare)(char *harePtr, int i), void (*moveTortoise)(char *tortoisePtr, int i)){
srand(time(NULL));
int move = 1 + rand() %10;
char *harePtr = wRaceTrack;
char *tortoisePtr = wRaceTrack;
size_t i;
for (i = 0; i < SIZE; i++)
printf("%c,", wRaceTrack[i]);
printf("\n\n");
moveHare(harePtr, move);
moveTortoise(tortoisePtr, move);
i = 0;
for (i = 0; i < SIZE; i++)
printf("%c,", wRaceTrack[i]);
printf("\n\n");
if (harePtr = tortoisePtr)
printf("OUCH! Damn tortoise bit the hare!\n\n");
if (harePtr[69])
return 1;
else if (tortoisePtr[69])
return 2;
else
raceRunner(wRaceTrack, moveHare, moveTortoise);
}
void moveHare ( char *harePtr, int i) {
if (i == 1) {
*harePtr = '_';
harePtr - 12;
*harePtr = 'H';
}
if (2 <= i <= 3) {
return;
}
if (4 <= i <= 5){
*harePtr = '_';
harePtr + 9;
*harePtr = 'H';
}
if (6 <= i <= 8) {
*harePtr = '_';
harePtr + 1;
*harePtr = 'H';
}
if (9 <= i <= 10) {
*harePtr = '_';
harePtr - 2;
*harePtr = 'H';
}
}
void moveTortoise ( char *tortoisePtr, int i) {
if (1 <= i <= 5) {
*tortoisePtr = '_';
tortoisePtr + 3;
*tortoisePtr = 'T';
}
if (6 <= i <= 7){
*tortoisePtr = '_';
tortoisePtr - 6;
*tortoisePtr = 'T';
}
if (8 <= i <= 1) {
*tortoisePtr = '_';
tortoisePtr + 1;
*tortoisePtr = 'T';
}
}
我要做的是首先将它们的 CURRENT 位置设置回“_”,然后根据随机生成器提出的内容相应地增加每个指针以沿数组向上或向下移动,然后更改将该值设置为“T”或“H”。第一个指向数组中最后一个元素的指针 [69] 赢得了比赛。
但是,当我运行该程序时,它每次都始终产生相同的结果,而野兔标记不会出现在数组的任何位置。我很肯定这是因为我的指针设置不正确,因为我仍在试图围绕整个概念进行思考。不能设置指向同一个数组的指针吗?还是我通过错误使用 * 和 & 以错误的方式访问数组?当谈到使用这些操作数将指针与数组正确集成时,我真的迷失了方向,因此感谢所有帮助。谢谢!
【问题讨论】:
-
1 <= i <= 5-->1 <= i && i <= 5 -
@david-tamrazov 1
-
我只是在一系列不同方面尝试指针,以便在学习过程中围绕它们展开思考。我想我会在这里使用函数指针来使程序更具可扩展性,可以压缩“racerunner”,这样它就不需要在 moveHare/Tortoise 中包含所有代码