Jump to content

Trabalho em C: problemas no eliminar informação, erros


Sofia Gonçalves

Recommended Posts

Bom dia!

Estou com um grave problema, pois tenho de entregar o trabalho dentro de horas e não consigo resolver algumas coisas!

O programa tem um menu principal com vários submenus e nestes há uma opção para eliminar quadra ou participante (o trabalho trata uma corrida de cavalos). Fiz a parte do eliminar e "corre", no entanto, depois não eliminar nada e aparece simplesmente "Quadra não encontrada..." ou "Participante não encontrado..."

O meu outro problema está na função FemeaMaisIdosa(), pois quando chamei esta função numa outra função (a função do submenu) começou a aparecer "Error: too few arguments to function "FemeaMaisIdosa".

Eu já vi em todo lado e não sei o que mais fazer.

Ponho aqui parte do meu programa na esperança que me consigam ajudar!

Agradeço desde já a ajuda

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <locale.h>

#define Max_Q 100 //Maximo de quadras
#define MAX_C 100 //Maximo de Cavalos
#define MAX_J 100 //Maximo de Jockeis
#define Max_P 3 //Maximo de Provas
#define MAX_NJ 15 //Maximo de Jornadas
#define MAX_PAR 100 //Maximo de participantes

typedef struct Data
{
    int d;
    int m;
    int ano;
} data;

struct tempoGastoProva
{
    int m;
    int seg;
    int mseg;
};

struct partJornada
{
    char nc[9];
    struct tempoGastoProva tGastoProva;
};

struct provas
{
    int nProvas;
    int nParticipantes;
    struct partJornada pProva[10];
};

typedef struct Quadra
{
    int cod;
    char NomeQuadra[100];
    char Localidade[100];
    int nCavalos;
    int vazio;

} quadra;

typedef struct RegParticipante
{
    char nomeCavalo[100];
    char sexoCavalo;
    int idadeCavalo;
    char nifJockey[9];
    char nomeQuadra[100];
    int cod1;
    int vazio1;

} participante;

typedef struct Jornada
{
    int nJornada;
    char localJornada[100];
    data dataJornada;
    int nprovas;
    struct provas prova[Max_P];

} jornada;


quadra q[Max_Q];
jornada vj[MAX_NJ];
jornada JO[MAX_NJ];
participante part[MAX_PAR];


char op;
unsigned int ultimoReg = 0;
unsigned int ultimaJornada = 0;

 main()
{
    setlocale(LC_ALL, "Portuguese");
    MenuPrincipal();
    return 0;
}

void MenuPrincipal()
{
    char op;
     do
        {
            system("cls");
            printf("MENU PRINCIPAL\n\n");
            printf("1 – Gestão de Quadras\n");
            printf("2 – Gestão de Participantes\n");
            printf("3 – Gestão de Jornadas\n");
            printf("4 – Estatísticas\n");
            printf("0 – Sair\n");
            printf("Selecionar opção: \n\n");
            op=getchar();

        switch (op)
        {
            case '1':GestaoDeQuadras();
                    break;

            case '2':MenuGestaoDeParticipantes();
                     break;

            case '3':GestaoDeJornadas();
                     break;

            case '4':MenuEstatisticas();
                    break;

            case '0': exit(0);
        }

    }while(op!='1' && op!='2' && op!='3' && op!='4' && op!='0');
}

void FemeaMaisIdosa (participante part[], int *num)
{
    int p, max, pmax;
    p=0;
    pmax=0;
    max=part [p].idadeCavalo;

    for (p=1; p<*num; p++)
    {
        if(part[p].sexoCavalo=='C'|| part[p].sexoCavalo)
        {
            if(part[p].idadeCavalo>max)
            {
                max=part[p].idadeCavalo;
                pmax=p;
            }
        }
        else printf("\nO cavalo nao e femea");
    }

    printf("\nA femea mais idosa e %s",part[pmax].nomeCavalo);
    printf("\nSexo: %c",part[pmax].sexoCavalo);
    printf("\nIdade: %d",part[pmax].idadeCavalo);
    printf("\nNC: %d", part[pmax].nifJockey);
    printf("\nQuadra: %s",part[max].nomeQuadra);
}

void MenuGestaoDeParticipantes()
{
    char op2;

    do
    {
        system("cls");
        printf("MENU GESTÃO DE PARTCIPANTES \n\n");
        printf("1 - Inserir participante\n");
        printf("2 - Eliminar participante\n");
        printf("3 - Consultar participante por NC do jockey\n");
        printf("4 - Consultar participante cujo cavalo seja a femea mais idosa\n");
        printf("5 - Listar todos os participantes\n");
        printf("0 - Voltar ao Menu Principal\n\n");
        printf("Selecionar opção:_\n");
        op2=getchar();
        switch (op2)
        {
            case '1':inserirParticipante();
                     break;

            case '2':EliminarParticipante();
                     break;

            case '3':ConsultarPorNCjockey();
                     break;

            case '4':FemeaMaisIdosa (participante part[], int *num);
                     break;

            case '5':

            case '0':Sair();
                    break;
        }
    }while(op2!=0);
    Sair();
}
Link to comment
Share on other sites

no que toca ao problema de apagar, bem, não apresentas código nenhum ... vai ser dificil não só perceber o que está a acontecer, como a tua própria explicação é estranha.

o outro problema, parece estar na chamada da função : case'4':FemeaMaisIdosa (participante part[], int *num)

a chamada da função requer somente a referencia Às variáveis. se não for isso, é como te disse anteriormente : o código apresentado é muito deminuto

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Peço desculpa, ocorreu algum erro e a função do eliminar não passou.

volto aqui a pôr tudo!

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <locale.h>

#define Max_Q 100 //Maximo de quadras
#define MAX_C 100 //Maximo de Cavalos
#define MAX_J 100 //Maximo de Jockeis
#define Max_P 3 //Maximo de Provas
#define MAX_NJ 15 //Maximo de Jornadas
#define MAX_PAR 100 //Maximo de participantes

typedef struct Data
{
    int d;
    int m;
    int ano;

} data;

struct tempoGastoProva
{
    int m;
    int seg;
    int mseg;
};

struct partJornada
{
    char nc[9];
    struct tempoGastoProva tGastoProva;
};

struct provas
{
    int nProvas;
    int nParticipantes;
    struct partJornada pProva[10];
};

typedef struct Quadra
{
    int cod;
    char NomeQuadra[100];
    char Localidade[100];
    int nCavalos;
    int vazio;

} quadra;

typedef struct RegParticipante
{
    char nomeCavalo[100];
    char sexoCavalo;
    int idadeCavalo;
    char nifJockey[9];
    char nomeQuadra[100];
    int cod1;
    int vazio1;

} participante;

typedef struct Jornada
{
    int nJornada;
    char localJornada[100];
    data dataJornada;
    int nprovas;
    struct provas prova[Max_P];

} jornada;


quadra q[Max_Q];
jornada vj[MAX_NJ];
jornada JO[MAX_NJ];
participante part[MAX_PAR];


char op;
unsigned int ultimoReg = 0;
unsigned int ultimaJornada = 0;

 main()
{
    setlocale(LC_ALL, "Portuguese");
    MenuPrincipal();
    return 0;
}

char menuGestaoQuadras()
{
    char op;
     do
        {
            system("cls");
            printf("MENU GESTÃO DE QUADRAS \n\n");
            printf("1 - Inserir Quadra\n");
            printf("2 - Eliminar Quadra\n");
            printf("3 - Consultar Quadra por nome\n");
            printf("4 - Consultar Quadra com mais cavalos \n");
            printf("5 - Listar Todas as Quadras\n");
            printf("0 - Voltar ao Menu Principal\n\n");
            printf("Selecionar opção:_\n");
            op=getchar();
        }while(op!='1' && op!='2' && op!='3' && op!='4' && op!='5' && op!='0');
        return op;
}

void GestaoDeQuadras()
{
    char op;
    op = menuGestaoQuadras();
    switch (op)
    {
        case '1':inserirQuadra();
                break;

        case '2':EliminarQuadra();
                break;

        case '3':ConsultarQuadra();
                break;

        case '4':ConsultaQuadraMaisCavalos();
                break;

        case '5':ListAllQuadras();
                break;

        case '0': Sair();
                break;
    }
}

void MenuPrincipal()
{
    char op;
     do
        {
            system("cls");
            printf("MENU PRINCIPAL\n\n");
            printf("1 – Gestão de Quadras\n");
            printf("2 – Gestão de Participantes\n");
            printf("3 – Gestão de Jornadas\n");
            printf("4 – Estatísticas\n");
            printf("0 – Sair\n");
            printf("Selecionar opção: \n\n");
            op=getchar();

        switch (op)
        {
            case '1':GestaoDeQuadras();
                    break;

            case '2':MenuGestaoDeParticipantes();
                     break;

            case '3':GestaoDeJornadas();
                     break;

            case '4':MenuEstatisticas();
                    break;

            case '0': exit(0);
        }

    }while(op!='1' && op!='2' && op!='3' && op!='4' && op!='0');
}

void inserirQuadra()
{
    char ch;
    unsigned int i;
    i=ultimoReg;


    printf("---------------------------------------------------------------------------------------\n");
    printf("--------------------------------- INSERIR QUADRA(S) -----------------------------\n");
    printf("---------------------------------------------------------------------------------------\n\n\n");
    do
    {
        fflush(stdin);
        printf("Nome da Quadra: ");
        fflush(stdin);
        gets(q.NomeQuadra);
        fflush(stdin);
        printf("Localidade: ");
        fflush(stdin);
        gets(q.Localidade);
        fflush(stdin);
        printf("Quantidade de Cavalos: ");
        scanf("%i",&q.nCavalos);

        puts("Quer inserir outra Quadra [(S)im | (N) ão]");
        fflush(stdin);
        op = toupper(getchar());
        ultimoReg++;
        i++;
    }while(i>=100 || op!='N');

    fflush(stdin);
    system("pause");
    regressarMenuQuadras();
}

void EliminarQuadra() /* Através desta função, o utilizador poderá eliminar o conteúdo que inseriu no 'Inserir Quadra' */
{
    int cod, cont=0;
    char resp;
    char NQ[100];
    system("cls");

    printf("\nQual o nome da quadra que deseja eliminar?\n");
    fflush(stdin);
    gets (NQ);

    while (cont<=100)
    {
            if (q[cont].vazio == 1 && strcmp(q[cont].NomeQuadra,NQ)==0)
            {
                printf("\nNome da quadra: %s", q[cont].NomeQuadra);
                printf("\nLocalidade: %s", q[cont].Localidade);
                printf("\nQuantidade de cavalos: %d", q[cont].nCavalos);
                getchar();

                printf("\nDeseja realmente eliminar? S/N\n ");
                scanf("%c", &resp);

                if ((resp == 'S') || (resp == 's'))
                {
                    q[cont].vazio=0;

                    printf ("\nA quadra foi eliminada com sucesso\n");
                    break;
                }
                else
                {
                    if ((resp == 'N') || (resp == 'n'))
                    {
                        printf ("\nQuadra nao eliminada\n");
                        break;
                    }

                }
            }
            cont++;

            if(cont>100)
                printf("\nQuadra nao encontrada!\n");
    }
}
 

void FemeaMaisIdosa (participante part[], int *num)
{
    int p, max, pmax;
    p=0;
    pmax=0;
    max=part [p].idadeCavalo;

    for (p=1; p<*num; p++)
    {
        if(part[p].sexoCavalo=='C'|| part[p].sexoCavalo)
        {
            if(part[p].idadeCavalo>max)
            {
                max=part[p].idadeCavalo;
                pmax=p;
            }
        }
        else printf("\nO cavalo nao e femea");
    }

    printf("\nA femea mais idosa e %s",part[pmax].nomeCavalo);
    printf("\nSexo: %c",part[pmax].sexoCavalo);
    printf("\nIdade: %d",part[pmax].idadeCavalo);
    printf("\nNC: %d", part[pmax].nifJockey);
    printf("\nQuadra: %s",part[max].nomeQuadra);
}

void MenuGestaoDeParticipantes()
{
    char op2;

    do
    {
        system("cls");
        printf("MENU GESTÃO DE PARTCIPANTES \n\n");
        printf("1 - Inserir participante\n");
        printf("2 - Eliminar participante\n");
        printf("3 - Consultar participante por NC do jockey\n");
        printf("4 - Consultar participante cujo cavalo seja a femea mais idosa\n");
        printf("5 - Listar todos os participantes\n");
        printf("0 - Voltar ao Menu Principal\n\n");
        printf("Selecionar opção:_\n");
        op2=getchar();
        switch (op2)
        {
            case '1':inserirParticipante();
                     break;

            case '2':EliminarParticipante();
                     break;

            case '3':ConsultarPorNCjockey();
                     break;

            case '4':FemeaMaisIdosa (participante part[], int *num);
                     break;

            case '5':

            case '0':Sair();
                    break;
        }
    }while(op2!=0);
    Sair();
} 
Link to comment
Share on other sites

7 minutos atrás, PsySc0rpi0n disse:

A da função FemeaMaisIdosa(...) é fácil!

Repara bem como chamas a função!!!

Responde e escreve o seguinte:

Como declaraste a função?

Como chamaste a função?

Chamei a função assim " case '4':FemeaMaisIdosa (participante part[], int *num);" até já tirei o que está entre parentesis e não funciona na mesma

Link to comment
Share on other sites

uma coisa de cada vez: Explica o que fazes para determinar que a eliminação tem problemas, assim todos os eventos que deveriam acontecer e não acontecem, e o inverso, acontecem e nao deveriam acontecer

Edited by HappyHippyHippo
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

primeiro de tudo, olha bem para o código. O ciclo e sempre feito ate ao fim, o que quer dizer que a mensagem ira sempre aparecer. Segundo, se a mensgame aparece sem mais nenhuma mensagem antes e porque realmente a quadra não foi encontrada (não existe na lista)

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.