将堆上的结构从c ++转换为c

时间:2015-10-15 14:51:53

标签: c++ c pointers struct heap

问题是,编写一个名为card_factory的函数,该函数不接受任何参数并返回指向Playing_Card结构的指针。
Playing_Card结构将声明如下:

struct Playing_Card
{int rank;
int suit; };

在工厂函数内部,在堆上分配一个新的Playing_Card结构。使用1到13之间的随机值填充排名成员。使用0到3之间的随机值填充套件成员。将这个新的Playing_Card结构返回到 来电者。

从主函数调用card_factory五次。将每个调用的结果存储在一个数组中 Playing_Card指针。 编写另一个名为print_playing_card的方法,该方法接收指向a的指针 Playing_Card,打印如下:

  

打印扑克牌:
  等级:女王   西装:俱乐部

如果诉讼代表如下:0 =钻石,1 =心脏,2 =球杆,3 =黑桃 排名如下:1 = Ace,11 = Jack,12 = Queen,13 = King,2到10是值2到10.
确保在main()退出之前,它通过释放适当的堆分配来清理内存分配。

#include <stdio.h>
#include <stdlib.h>

struct Playing_Card {

int rank;
int suit;
};

void print_playing_card(Playing_Card *ptr) {
cout << "Rank: ";
switch (ptr->rank) {
case 1:
cout << "Ace\n";
break;
case 11:
cout << "Jack\n";
break;
case 12:
cout << "Queen\n";
break;
case 13:
cout << "King\n";
break;
default:
cout << ptr->rank << "\n";
}
cout << "Suit: ";
switch (ptr->suit) {
case 0:
cout << "Diamonds\n";
break;
case 1:
cout << "Hearts\n";
break;
case 2:
cout << "Clubs\n";
break;
case 3:
cout << "Spades\n";
break;              
}

cout << endl;
}
Playing_Card* card_factory() {
Playing_Card *temp = new Playing_Card;
temp->rank = rand()%13 + 1;
temp->suit = rand()%4;
return temp;
}

int main() {

Playing_Card *arr[5];

// Allocate memory on heap
for(int i = 0; i < 5; i++) arr[i] = card_factory();


// Print the cards
cout << "Printing Playing Cards:\n\n";
for(int i = 0; i < 5; i++) print_playing_card(arr[i]);

// Free the memory allocated on heap
for(int i = 0; i < 5; i++) delete(arr[i]);

// exit
return 0;
}

我已编写此代码,我需要使用c编程语言,而不是c ++,是否有人可以帮助我进行转换?

1 个答案:

答案 0 :(得分:1)

cout成为printf

new成为malloc

删除免费

在块的开头声明任何自动变量。

编辑:在所有struct引用前添加Playing_card

我认为这涵盖了您的端口。