1
resposta

struct de Ponteiro em C

Olá galera, sou iniciante em C, e estou criando um projeto para a faculdade para criar um sistema em C que possa registrar equipes e fazer um ranking de acordo com os resultados de acordo com um campeonato que iremos participar.

Não consigo ver erros nesse código, e porém ao imprimir o ponteiro me retorna uns valores bizarros e não realmente o que está realmente alocado dentro do malloc em nomeEquipe.

o que estou fazendo de errado?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 10

struct lancamento{
        char nomeEquipe[50];
        int  numeroTentativas;
        int  distanciaAlvo;
        int  situacao;
        };

struct sucesso{
        char nomeEquipe[50];
        int distanciaAlvo;
        int numeroTentativas;
};

void cadastraEquipe(struct lancamento *equipes){
        printf("INFORME O NOME DA EQUIPE: ");
        fflush(stdin);
        gets(equipes->nomeEquipe);
        equipes->numeroTentativas = 0;
        equipes->distanciaAlvo = 0;
        equipes->situacao = 0;
    }

void menu(){

    int escolha, i, numEquipes;
    char ver_opt;
    struct lancamento *equipes;

    equipes = (struct lancamento*) malloc(sizeof(struct lancamento)* MAX);

    system("color F0");
    printf("******************** MENU  ********************\n");
    printf("                                                          *\n");
    printf("         [1] - CADASTRAR EQUIPES(MAX 10)                  *\n");
    printf("         [2] - LISTAR EQUIPES CADASTRADAS                      *\n");
    printf("         [5] - SAIR                                       *\n");
    printf("                                                          *\n");
    printf("***************************************** *\n");

    printf("DIGITE A OPCAO: ");
    scanf("%d", &escolha);

    switch (escolha)
    {
        case 1:
            system("cls");
            for(i= 0; i<MAX;)
            {
                printf("REGISTRO DA EQUIPE:\n");

                cadastraEquipe(&equipes);
                printf("DESEJA CADASTRAR OUTRA EQUIPE?: S/N?");
                scanf("%c", &ver_opt);
                if((ver_opt =='N') || (ver_opt=='n'))
                {
                    system("cls");
                    escolha = NULL;
                    menu();
                }else{
                    i++;
                     }
            }
        break;

        case 5:
            printf("OBRIGADO POR UTILIZAR NOSSO SISTEMA\n");
            exit(1);
        break;

        case 2:
            for(i = 0 ; i<MAX; i++)
            {
            printf("Nome da Equipe :%s\n", (*equipes).nomeEquipe);

            }
        break;

        default:
            printf("OPCAO INVALIDO\n");
            system("pause");
            system("cls");
            return menu();
        break;
    }
}

int main(){

        menu();

    }
1 resposta

Tenha certeza que está usando o símbolo correto na hora de imprimir o ponteiro, no caso você quer o valor dentro do ponteiro (valor dentro do espaço de memória) e não o valor do ponteiro (valor do espaço de memória). Em geral em C usamos o & para pegar o valor dentro do espaço de memória quando temos um *ponteiro. Mas existe outros casos quando temos ponteiro de ponteiro **ponteiro e não precisamos colocar o &.