Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C中实现strcpy()和结构排序?_C_Sorting_Struct_Strcpy - Fatal编程技术网

如何在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

我正在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, 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的具体问题可能更合适。好的,我将它分为两个问题。谢谢