如何在C中实现strcpy()和结构排序?
我正在Ubuntu中使用GCC制作一个小型ANSI C应用程序,它使用strcpy()和排序 我的标题:如何在C中实现strcpy()和结构排序?,c,sorting,struct,strcpy,C,Sorting,Struct,Strcpy,我正在Ubuntu中使用GCC制作一个小型ANSI C应用程序,它使用strcpy()和排序 我的标题: #include <stdlib.h> #include <stdio.h> #include <string.h> #define DECKSZ 52 typedef struct card { enum {ACE=1, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, Q
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define DECKSZ 52
typedef struct card {
enum {ACE=1, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING} pips;
enum {SPADES, CLUBS, HEARTS, DIAMONDS} suit;
char cardName[20];
} card;
card deck[DECKSZ];
void initDeck(card[]);
void labelCards();
void shuffleDeck(card[]);
void swap(card*,card*);
#包括
#包括
#包括
#定义SZ 52
typedef结构卡{
EnUM {ACE=1、二、三、四、五、六、七、八、九、十、杰克、皇后、King } PIP;
enum{黑桃、梅花、红桃、钻石}套装;
charcardname[20];
}卡片;
卡片组[DECKSZ];
无效(卡片[]);
无效标签卡();
无效洗牌(卡片[]);
无效掉期(卡*,卡*);
我的主文件:
#include "CardOps.h"
void initDeck(card deck[]) {
int counter;
for (counter = 0; counter < DECKSZ; counter++) {
deck[counter].pips = (const)((counter % 13) + 1);
deck[counter].suit = (const)(counter / 13);
}
}
void labelCards() {
char pips[13][6] = {"Ace","Two","Three","Four","Five","Six","Seven","Eight","Nine","Ten","Jack","Queen","King"};
char suits[4][9] = {"Spades","Hearts","Diamonds","Clubs"};
int i;
card cardName;
for (i = 0; i < DECKSZ; i++) {
strcpy(cardName, pips[i]);
strcpy(cardName, suits[i]);
}
}
int displayCards(int numCards) {
int i, countCards;
if (numCards > 52)
countCards = 52;
else
countCards = numCards;
for (i = 0; i < countCards; i++) {
printf(cardName);
}
return countCards;
}
void shuffleDeck(card deck[]) {
int i, j;
for (i = 0; i < DECKSZ; i++) {
j = rand() % DECKSZ;
swap(&deck[i], &deck[j]);
}
}
void SortCards() {
}
void swap(card *c1, card *c2) {
card temp;
temp = *c1;
*c1 = *c2;
*c2 = temp;
}
int main(void) {
initDeck(deck);
shuffleDeck(deck);
return EXIT_SUCCESS;
}
#包括“CardOps.h”
void initDeck(卡片组[]){
整数计数器;
用于(计数器=0;计数器52)
countCards=52;
其他的
countCards=numCards;
对于(i=0;i
我正在尝试实现以下功能:
一个名为LabelCards()的函数,它将一个void和
返回一个空值。使用中的两个枚举类型成员中的每一个
牌组为cardName分配字符串,即“红心皇后”。(你会
要为创建字符串数组“Ace”、“Two”、“Three”等
PIP和一个类似的数组,用于处理字符串处理。)
请注意,您需要使用strcpy()来进行实际的赋值
给名片上的名字
一个名为DisplayCards()的函数,它将
整数N,并返回一个整数。该函数应显示
牌组中前N张牌的cardName。函数返回
显示的牌数,可能少于实际牌组
尺寸。例如,53张牌不能在52张牌组中显示;我
需要检查并返回实际的卡数
显示
一个名为SortDeck()的函数,它获取并返回一个void。我的
函数应使用swap()算法在
甲板首先由他们的点子,然后根据他们的西装价值
有人能帮我让功能正常工作吗?谢谢 不要将
deck
的声明放在标题中。您应该将其设置为外部
,并将声明移动到主文件中
您的initDeck
函数正在使用DECKSZ
对数组进行索引,该值为常量且超出范围。您可能打算改用计数器
labelCards
正在尝试将整个阵列复制到单个卡中。类型不匹配,并且未使用循环变量
displayCards
打印不存在的cardName
。您可能想打印特定卡的cardName
。displayCards
应该打印特定卡的cardName
,是的。如何在labelCards
中使用循环变量?要在labelCards
中标记的卡在哪里?您真的需要一个单独的函数来标记这些卡吗,还是不能在initDeck
中初始化每张卡时标记它们?另外,对于字符串的本地数组,应该使用static const char*pipNames[]={“Ace”,…}代码>,并且不要忘记数组是从0索引的,但是ace的值为1。在displayCards
中,要显示的卡在哪里?如果您将卡片组作为参数传递,则可以使用i
对其进行索引,并打印该卡片的cardName
。此外,strcpy
将覆盖目标字符串,因此套装将覆盖卡片中的PIP。您可以使用strcpy
作为PIP,使用strcat
作为套装,但这会给您留下例如“AceSpades”
。也许sprintf(“%s/s”),pipNames[pips-1],suitNames[suit])
会更好(或者snprintf
这样你就不会溢出)嗯,看起来这是一个有一些愚蠢规则的作业。我猜你必须假设只有一个全局数据组,你必须使用strcpy。祝你好运!这个问题似乎离题了,因为它不是一个可能对未来访问者有帮助的具体问题。(这里至少有两个问题:排序和strcpy。)问两个关于如何排序和如何使用strcpy的具体问题可能更合适。好的,我将它分为两个问题。谢谢