我试图创建一个7个房间的文字冒险游戏,信息保存在文件中。这个问题类似于Connect Rooms Randomly in Adventure Game,但答案并没有完全帮助我。我以与OP不同的方式处理了我的程序,因此我不确定如何使用该答案来帮助我。
这个想法是你有7个房间,名为A,B,C,D,E,F和G.房间创建后,我需要随机连接它们。每个房间需要3至6个随机连接。如果房间A连接到B,C和D,则每个房间应连接到A.然后将该信息保存到稍后读取的文件中。
到目前为止,我对此部分的代码是:
char *connections[7];
int j = 0;
int randomRoom;
for (j = 0; j <= randConnections; j++) {
randomRoom = rand() % 10;
if (randomRoom == randName) {
randomRoom = rand() % 10;
} else {
connections[j] = names[randomRoom];
}
randConnections是一个介于3和6之间的随机int,在代码的前面定义。 names是一个字符串数组,用于保存房间的名称,也在我的程序中先前定义过。
我对C很陌生(我很熟悉Java),所以我无法弄明白。我应该提一下,这是一个函数定义为:
void createRooms(FILE *fp)
我知道可能有更有效的方法来做到这一点,但此时我只是试图让代码工作并在以后处理效率。
我已经完成了大量的谷歌搜索,老实说,现在我的头靠在墙上。任何帮助将不胜感激。如果还有我要发布的代码或任何其他信息让我知道。
答案 0 :(得分:0)
C风格的字符串可能会有点混乱。 A&#34;字符串&#34;在纯C中是一个char数组。 C中的数组与指针密切相关。实际上,而不是定义
char myCString[6] = "hello";
您可以定义
char * myCString = "hello";
实际上,在第一种情况下,单独使用myCString只会返回指向第一个元素的指针。 []运算符只是一个方便的解引用和递增运算符。因此&(myCString+1)
变为myCString[1]
故事很长,你的&#34;字符串&#34; C中的数组实际上是一个char *数组 - 指向字符数组的第一个元素的指针
您尝试将此分配给单个字符,但这并不合乎逻辑。如果你的意思是真正成为字符串的连接,那就像kcraigie说的那样。
这里有一些我发现的备份,我担心会有更多的细微差别而且我不是专家,但这就是要点 - https://en.wikibooks.org/wiki/C_Programming/Pointers_and_arrays#Pointers_and_Arrays
这可能看起来很荒谬来自于java - 这就是你的C语言。 C ++的标准库包含一个类似于你熟悉的字符串结构。这是一个包装&#34; raw&#34; C数组并控制对它的访问,并像Java和C#字符串一样管理它。现代C ++最佳实践试图远离原始数组。你还会注意到没有什么可以阻止你调用MyCString [4000],它只是从不知名的地方抓住一块记忆而天堂知道什么。在C中没有对原始数组进行边界检查。小心!