filename.exe已停止在CodeBlocks中工作

filename.exe has stopped working in CodeBlocks

本文关键字:CodeBlocks 工作 exe filename      更新时间:2023-10-16

我从一本书中复制了一个"洗牌"程序的代码到我的CodeBlocks编辑器中,并试图运行它。它打开DOS框,过了一秒钟我收到一个错误,说"filename.exe"已停止工作。我已经检查了两次代码,没有任何错误。你们能帮我吗?这是以防万一的代码:

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>
struct card{
    const char *face;
    const char *suit;
};
typedef struct card Card;
void filldeck(Card * const wDeck, const char *wFace[],const char *wSuit[]);
void shuffle(Card * const wDeck);
void deal(const Card * const wDeck);
int main(void){
    Card deck[52];
    const char *face[]={"Ace","Deuce","Three","Four","Five","Six","Seven","Eight","Nine","Ten","Jack","Queen","King"};
    const char *suit[]={"Hearts","Diamonds","Clubs","Spades"};
    srand(time(NULL));
    fillDeck(deck,face,suit);
    shuffle(deck);
    deal(deck);
    return 0;
}
void fillDeck(Card * const wDeck, const char *wFace[],const char *wSuit){
    int i;
    for(i=0;i<=5;i++){
        wDeck[i].face=wFace[i%13];
        wDeck[i].suit=wSuit[i/13];
    }
}
void shuffle(Card * const wDeck){
    int i,j;
    Card temp;
    for(i=0;i<=5;i++){
        j=rand()%52;
        temp=wDeck[i];
        wDeck[i]=wDeck[j];
        wDeck[j]=temp;
    }
}
void deal(const Card * const wDeck){
    int i;
    for(i=0;i<=5;i++){
        printf("%5s of %-8s%s",wDeck[i].face,wDeck[i].suit,(i+1)%4 ? " ": "n");
    }
}

初始化前6张卡,然后在所有52张卡中洗牌,这意味着您将打印出一些未初始化的卡。你的洗牌应该是:

int n = 6;
for (i = n - 1; i >= 1; i--) {
    j = rand() % (i + 1);
    temp = wDeck[i];
    wDeck[i] = wDeck[j];
    wDeck[j] = temp;
}

您在fillDeck的定义中也有一个拼写错误,缺少一个[],应该是:

void fillDeck(Card * const wDeck, const char *wFace[], const char *wSuit[])

编译器没有将其视为错误,因为fillDeck的声明具有不同的字母大小写(filldeck)。

这样只初始化6张卡不是一个好主意。你应该初始化整个牌组,然后从当前剩余的牌组中随机取出你想发的牌。