我正在使用C ++制作一个用卡填充Deck结构的程序。这是Deck的定义:
struct Deck{
char suit;
int value;
};
我的问题是使用我的struct fillDeck
的函数无法访问struct的内容。也许我完全错了,但这就是我所拥有的:
void fillDeck(Deck *deck){
for (int num = 2; num <= 14; num++){
for(int count = 0; count < 4; count++){
if(count == 0){
suit = "clubs";
}
if(count == 1){
suit = "hearts";
}
if(count == 2){
suit = "diamonds";
}
if(count == 3){
suit = "spades";
}
}
}
}
我的主要功能如下。
int main (int argc, char *argv[]){
Deck deck;
fillDeck(&deck);
}
答案 0 :(得分:1)
如果将结构成员suit
更改为字符串,则主函数将起作用。
#include <string>
struct Deck
{
std::string suit;
int value;
};
然后像fillDeck
一样访问它:
...
deck->suit = "clubs";
...
答案 1 :(得分:0)
像这样声明你的结构
struct Deck{
char* suit;
int value;
};
然后你可以像这样访问它:
deck->suit
答案 2 :(得分:0)
如果您需要保留套装的全名,使用std :: string是一个不错的选择。 如果您必须使用角色进行套装,那么您可以使用以下缩写:
void fillDeck(Deck *deck){
for (int num = 2; num <= 14; num++){
for(int count = 0; count < 4; count++){
if(count == 0){
deck->suit = `C`;
}
if(count == 1){
deck->suit = `H`;
}
if(count == 2){
deck->suit = `D`;
}
if(count == 3){
deck->suit = `S`;
}
}
}
}
您可以相应地调整其余部分。
也可以尝试使用switch case
语句来代替连续的if语句,在这种情况下可能看起来更好。
答案 3 :(得分:0)
在查看你传递给main()内部的fillDeck(Deck * deck)函数的内容时,我会说你可能正在传递你的套牌参数错误,因为现在你将地址传递给了一个Deck您尚未初始化的数据结构...
我认为您应该采取的策略是在主函数内部定义Deck类型的指针,可能类似于Deck * ptrDeck,然后该指针应该指向Data类型的新结构。我现在并不太了解你的问题设置得太好了,但我也认为这个指针应该指向一个类型套牌数组,然后用它的相应值保存每个套装。您很可能必须使用for循环填充所述类型数据数组以保存每个套装和值。这可以/应该在自己的功能中完成。
然后,您可以创建另一个函数来打印Deck结构的每个初始化实例。
你的for循环可能会有类似ptrDeck [i] .suit =“不管它是什么”...但是你再次将你的西装宣布为char类型所以在我看来也许你必须要考虑到这一点一点......
我不是专家,我花了一些时间来理解指针以及如何访问结构中的数据。但我认识到你遇到的困难,因为它与我所拥有的相似,这只是我在没有明确为你编写代码的情况下解决它的过程......
如果我对某个地方的理解是某个地方有人请让我知道,获得一些反馈会很酷......