繁体   English   中英

如何在C中实现strcpy()和对结构进行排序?

[英]How can I implement strcpy() and sorting of a struct in C?

我正在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*);

我的主文件:

#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;
}

我正在尝试实现以下功能:

一个称为LabelCards()的函数,该函数将void作为参数并返回void。 使用卡片组中的两个枚举类型成员中的每个成员,将一个字符串分配给cardName,即“ Heart of Hearts”。 (您将要为点创建一个字符串数组“ Ace”,“ Two”,“ Three”等,并为处理字符串处理创建一个类似的数组。)请注意,您需要使用strcpy()对cardName进行实际分配。

一个名为DisplayCards()的函数,该函数将整数N作为参数,然后返回整数。 该功能应显示卡座中前N张卡片的cardName。 该函数返回显示的卡片数量,该数量可能小于实际的纸牌大小。 例如,不能在52张牌堆中显示53张牌; 我需要检查并返回显示的实际卡数。

一个名为SortDeck()的函数,该函数获取并返回一个void。 我的函数应该使用swap()算法,首先按照点数,然后根据适合的值来组织卡片组中的卡片。

有人可以帮我使功能正常工作吗? 谢谢!

请勿在标题中放置deck的声明。 您应该将其设为extern ,并将声明移至主文件中。

您的initDeck函数正在使用常量和超出范围的DECKSZ索引数组。 您可能打算改用counter

labelCards试图将整个阵列复制到单个卡中。 类型不匹配,并且不使用循环变量。

displayCards打印cardName ,该名称不存在。 大概是要打印特定卡的cardName

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM