有没有办法使函数返回字符串矩阵?

时间:2019-07-06 23:33:17

标签: c string function matrix return

我一直在写sueca纸牌游戏代码(我是巴西人,所以代码中使用的单词是葡萄牙语)进行练习,但发现了一个难题。我做了一个函数,打算返回一个洗牌的牌组(以sueca标记为40张牌)。为此,我创建了一个由40个字符串组成的char型矩阵,每个字符串2个字符。改组的部分还不错,我已经对其进行了测试,并且可以正常工作(使用printfs进行检查)。我面临的问题是使此函数正确返回经过改组的平台。该程序总是在应该显示返回信息(在另一个函数的printf上)的那一刻崩溃,并且弹出窗口显示“ untitled1.exe已停止工作”消息。

我首先尝试的是使函数(embaralhar())返回矩阵变量,然后在strcpy()上调用它,将返回值复制到相同大小的另一个矩阵中,因此我可以对另一个函数进行操作。该其他功能应该采用第一张卡(baralho [0])并将其显示给用户。 我一直在研究如何使用指针来实现这一目标,但是却什么也没做,而且我想不出任何其他方法来解决这个问题。我将程序这一部分中使用的函数带到一个.c文件中,以使其易于编辑和理解-实际程序有1个主文件(.c)和4个标头,即“ MenuNovoJogo.h”有麻烦的功能。

#include <stdio.h>
#include <stdlib.h>

char embaralhar(void) {
    char baralho[40][2] = {{"oA"}, {"oS"}, {"oR"}, {"ov"}, {"or"}, {"os"}, {"oc"}, {"oq"}, {"ot"}, {"od"}, {"cA"}, {"cS"}, {"cR"}, {"cv"}, {"cr"}, {"cs"}, {"cc"}, {"cq"}, {"ct"}, {"cd"}, {"eA"}, {"eS"}, {"eR"}, {"ev"}, {"er"}, {"es"}, {"ec"}, {"eq"}, {"et"}, {"ed"}, {"pA"}, {"pS"}, {"pR"}, {"pv"}, {"pr"}, {"ps"}, {"pc"}, {"pq"}, {"pt"}, {"pd"}};
    int i, j, x, k;
    char aux[2];
    srand(time(NULL));
    //shuffling
    for(k=0 ; k<=2 ; k++) {
        for(i=0 ; i<=39 ; i++) {
            x = rand() % 40;    
            for(j=0 ; j<=1 ; j++)
                aux[j] = baralho[x][j];
            for(j=0 ; j<=1 ; j++)
                baralho[x][j] = baralho[i][j];
            for(j=0 ; j<=1 ; j++)
                baralho[i][j] = aux[j];
        }
    }
    return baralho;
}

int main(void) {    
    char baralho[40][2], primeiraCarta[2], naipeTrunfo[7], cartaRevelada[6], cartaTrunfo[20];
    int i;
    //calling the matrix from the other fuction
    strcpy(baralho, embaralhar());
    //taking the first card of the deck
    for(i=0 ; i<=1 ; i++)
        primeiraCarta[i] = baralho[0][i];
    //recognizing which card it is
    switch(primeiraCarta[0]) {
        case 'o': strcpy(naipeTrunfo, "Ouros"); break;
        case 'c': strcpy(naipeTrunfo, "Copas"); break;
        case 'e': strcpy(naipeTrunfo, "Espadas"); break;
        default: strcpy(naipeTrunfo, "Paus"); break;
    }
    switch(primeiraCarta[1]) {
        case 'A': strcpy(cartaRevelada, "As"); break;
        case 'S': strcpy(cartaRevelada, "Sete"); break;
        case 'R': strcpy(cartaRevelada, "Rei"); break;
        case 'v': strcpy(cartaRevelada, "Valete"); break;
        case 'r': strcpy(cartaRevelada, "Rainha"); break;
        case 's': strcpy(cartaRevelada, "Seis"); break;
        case 'c': strcpy(cartaRevelada, "Cinco"); break;
        case 'q': strcpy(cartaRevelada, "Quatro"); break;
        case 't': strcpy(cartaRevelada, "Tres"); break;
        default: strcpy(cartaRevelada, "Dois"); break;
    }
    //showing the result to the user
    strcpy(cartaTrunfo, cartaRevelada);
    strcat(cartaTrunfo, " de ");
    strcat(cartaTrunfo, naipeTrunfo);
    printf(naipeTrunfo);
}

0 个答案:

没有答案