c - 比较相似的数据类型无效?
问题描述
我正在研究一个应用程序项目,以找出在德州扑克游戏中获胜的概率。
我的程序有下面给出的 3 种数据类型。
typedef enum {
SPADES,
HEARTS,
DIAMONDS,
CLUBS,
NUM_SUITS
} suit_t;
struct card_tag {
unsigned value;
suit_t suit;
};
typedef struct card_tag card_t;
struct deck_tag {
card_t ** cards;
size_t n_cards;
};
typedef struct deck_tag deck_t;
我在编写断言函数以检查洗牌后卡片是否重复时遇到了一个问题。错误说我正在比较无效的数据类型。错误消息的图像是:
所以从技术上讲,我仍在比较相似的数据类型,但它们是无效的。谁能帮我?
解决方案
您不能==
用来比较两个结构。的操作数==
必须是算术或指针。而是比较他们的成员:
card_t a = card_from_num(checkingCard);
card_t b = *d->cards[i];
if (a.value == b.value && a.suit == b.suit) …
您可以为此编写一个函数:
_Bool CardsAreEqual(card_t a, card_t b)
{
return a.value == b.value && a.suit == b.suit;
}
…
if (CardsAreEqual(card_from_num(checkingCard), *d->cards[i]) …
推荐阅读
- reactjs - React JS / Hook 动态聊天机器人
- java - java.lang.IllegalStateException:onGetLayoutInflater() 在 Fragment 附加到 FragmentManager 之前无法执行
- javascript - 带有 React 的 .NET Core 3 - window.location.reload 401 错误
- oracle - Oracle 触发器 NEW.SAL 尚未声明错误
- javascript - 从本地计算机进行 API Gateway 调用时,如何避免 CORS 错误?
- javascript - 如何让这条 DELETE 路线在我的 products.js 路线中工作?
- alexa - Alexa For Business 私人技能似乎不会包含在日常工作中
- ruby - Gsub 忽略字符串插值
- algorithm - 找到连接所有节点的最短路径集
- .net - 具有 ASP.NET Core 3.0 和 EF Core 的多租户应用程序