成為C 高手之實戰專案

2021-08-19 16:22:23 字數 2480 閱讀 5266

#include 

#include

#include

//定義撲克的花色

enum suit;

//一副牌的數量

#define card_count 54

//定義撲克

typedef

struct cardcard;

//定義玩家

typedef

struct playerplayer;

//分牌完成後呼叫的函式的型別

typedef

int (*compare)(card* ,card*);

//函式宣告們

char* getcardname(const card*);

card** shuffle(const card*);

void dispatchcards(player** ,int ,const card** );

void sort(card**,int,compare);

int compare1(card* ,card*);

int compare2(card* ,card*);

void initonepack();

//原始一副牌所在的陣列

card pokers[card_count];

//入口函式

int main(void)

; //發牌

dispatchcards(players,sizeof(players)/sizeof(player*),shuffledpokers);

//洗後的牌用完了,釋放之

free(shuffledpokers);

int i;

//列印出每個玩家手中的牌

for(i=0;i//每個玩家都需要換一次行

printf("\n");

}//釋放玩家手中牌的陣列

for(i=0;ireturn0;}

//構造一副牌

void initonepack()

//剩下的兩張:大王和小王

//joker1

pokers[i].value=i/4+1;

pokers[i].suit=joker1;

//joker2

pokers[i+1].value=i/4+2;

pokers[i+1].suit=joker2;

}//洗牌,引數是原始的一副牌,返回洗完後的牌

card** shuffle(const card* pokers)else

}free(pokers2);

//返回洗完後的陣列

return retpokers;

}//發牌

//players是玩家陣列

//playercount是玩家數量

//shuffledcards是洗完後的一副牌

void dispatchcards(player** players,int playercount,const card** shuffledcards)

//輪流向每個玩家發牌

for(i=0;i//取當前玩家

player *curplayer = players[i%playercount];

//向玩家發牌

curplayer->cards[curplayer->cardscount] = shuffledcards[i];

//玩家手中實際的牌數增加

curplayer->cardscount++;

}}//排序函式

//cards是要排序的牌,每一項是牌的指標

//cardscount是牌的數量

//compare_func是比較函式

void sort(card** cards,int cardscount,compare compare_func)}}

}//比較函式,先比較點數再比較花色

int compare1(card* a,card* b)else

if(a->value < b->value)else

}//比較函式,先比較點數再比較花色

int compare2(card* a,card* b)else

if(a->value < b->value)else

}//獲取牌的名字

//返回牌的名字字串,呼叫者用完後需要free()之。

char* getcardname(const card* card);//0=='\0'

switch (card->suit)

//存放點數名字

char valuestr[16];

switch(card->value)

//動態分配足夠的空間

char * ret = malloc(16);

//將兩個名字合併到ret中

sprintf(ret,"%s%s",suitstr,valuestr);

return ret;

}

從零開始帶你成為MySQL實戰優化高手

從零開始帶你成為mysql實戰優化高手 中mysql架構和innodb儲存引擎,在本次分享開始前先嘗試思考如下幾個常見的面試題 1.undo log和redo log了解過嗎?它們的作用分別是什麼?2.redo log是如何保證事務不丟失的?3.mysql的事務是先提交還是先刷盤?4.更新操作為什麼...

c 快捷鍵(成為高手必備)

ctrl shift b生成解決方案 ctrl f7 生成編譯 ctrl o 開啟檔案 ctrl shift o開啟專案 ctrl shift c顯示類檢視視窗 f4 顯示屬性視窗 shift f4顯示專案屬性視窗 ctrl shift e顯示資源檢視 f12 轉到定義 ctrl f12轉到宣告 c...

精品C語言學習資料 教你成為程式設計高手

親愛的down友 的獲取優質學習資源。特此鳴謝!4.visual c 專案開發案例全程實錄 含原始碼 本專題從軟體工程的角度出發,按照專案的開發順序,系統 全面地介紹了程式 開發流程。從開發背景 需求分析 系統功能分析 資料庫分析 資料庫建模到 系統開發,每一過程都進行了詳細的介紹。合初學者學習 課...