C 比较结构的两个实例
我有自己的数据类型,因为C89不允许bool类型。很遗憾,我不能使用C99 我已经测试了下面的代码,我的程序甚至没有意识到名称是不同的。这些名字很好用。我已经在结构的一个实例中加载了这些C 比较结构的两个实例,c,struct,C,Struct,我有自己的数据类型,因为C89不允许bool类型。很遗憾,我不能使用C99 我已经测试了下面的代码,我的程序甚至没有意识到名称是不同的。这些名字很好用。我已经在结构的一个实例中加载了这些 struct ROOM roomList [MAX_ROOMS_COUNT]; 我使用memset和strcpy从房间数组复制房间列表。测试这给了我想要的结果,就像这样 printf("%s", roomList[1].name) printf("%s", roomList[2].name) ... pri
struct ROOM roomList [MAX_ROOMS_COUNT];
我使用memset和strcpy从房间数组复制房间列表。测试这给了我想要的结果,就像这样
printf("%s", roomList[1].name)
printf("%s", roomList[2].name)
...
printf("%s", roomList[7].name)
房间数组有7个值
#define MAX_ROOMS_COUNT 7
typedef enum {
true = 1,
false = 0
} boolean;
struct ROOM {
char name[8];
char* type;
int numConnections;
char* connections [MAX_CONNECTIONS_COUNT];
};
boolean isSameRoom(struct ROOM x, struct ROOM y) {
//printf("Is Same Room, 1:%s, 2:%s\n", x.name, y.name);
if (x.name == y.name) {
//printf("ROOM IS SAME!");
return true;
}
else {
return false;
}
}
struct ROOM getRandomRoom() {
int random = rand() % MAX_ROOMS_COUNT;
return roomList[random];
}
void addRandomConnection() {
struct ROOM A;
struct ROOM B;
A = getRandomRoom();
do {
B = getRandomRoom();
}while(isSameRoom(A, B) == true);
//printf("Add Random Connection, 1:%s, 2:%s\n", A.name, B.name); //for testing purposes
}
使用print语句,我可以看到isSameRoom函数不起作用。它可以生成随机房间,但是当我运行程序时,我会得到A和B的相同房间。你知道为什么吗?谢谢!:) 首先,对这些结构使用传递值,这是非常低效的。你应该通过引用来传递 第二,正如其他人提到的,在C语言中不能将固定大小的字符串与
==
进行比较;你必须使用或其他一些结构
也许更好的办法是对整个结构进行整体比较
您无法将字符串与
==
进行比较,您必须使用strcmp
谢谢!我不知道这是不是真的。旁白:你说你用roomList[1]输出房间名称。name
thruroomList[7]。name
for#定义最大房间数(共7间
ROOMS)。在C中,数组是从0
索引的,因此应该是roomList[0]。name
通过roomList[6]。name
。如果结构成员之间有填充,那么memcmp()
是否不确定?对于初始化的struct
我想不会,因为未初始化的部分是零,但是对于struct
成员的值是单独分配的?对于未添加的结构
,如果唯一的区别可能是数组中有未使用空格的字符串,那么它们在实际相同时是否可以比较不同?此外,如果任何成员是指向数据值的指针,则数据可能相同,但指针不同。我建议唯一安全的方法是根据每个成员的类型对其进行比较。@WeatherVane,显然,这只适用于较浅的比较(re:pointer),但字符串的优点是。我知道你已经提到了。呜呜!删除评论。
return memcmp(&A, &B, sizeof(struct ROOM)) == 0;