Ir para conteúdo
Fórum Script Brasil
  • 0

Dúvida sobre structs e ponteiros


CarolineSantos

Pergunta

Estou realizando um trabalho para faculdade e estou  com dúvidas na utilização de structs e ponteiros, está aparecendo erros como o seguinte:

warning: implicit declaration of function 'CadCurso' [-Wimplicit-function-declaration]

warning: implicit declaration of function 'CadTurma' [-Wimplicit-function-declaration]

Não sei o porque desses erros aparecem no case se eu estou chamando as variaveis dos cadastros e listagens.
 

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

struct Curso
{
    int codigo;
    char nome[50];
};
struct Turma
{
    int codigo;
    char nome[50];
    int codigoCurso;
};
struct Disciplina
{
    int codigo;
    char nome[50];
    int codigoTurma;
};
struct Aluno
{
    int matricula;
    char nome[50];
    int codigoDisciplina;
};

int Opcao()
{
    int valor = 0;

    printf("\n-------------------------------------------------------");
    printf("\n    1-Cadastrar Curso       2-Cadastrar Turma          ");
    printf("\n    3-Cadastrar Disciplina  4-Cadastrar Aluno          ");
    printf("\n    5-Listar Turmas         6-Listar Disciplinas       ");
    printf("\n    7-Listar Aluno          8-Listar Cursos            ");
    printf("\n    9-Sair                                             ");
    printf("\n-----------------------------------------------------\n");
    scanf("%d",&valor);
    return (valor);
}

//aqui comeca o main
int main()
{

    int opc=99;
    int TOTAL = 0;
    int qtdCursos = 0;
    int qtdTurmas = 0;
    int qtdDisciplinas = 0;
    int qtdAlunos = 0;


    struct Curso * cursos;
    struct Turma * turmas;
    struct Disciplina * disciplinas;
    struct Aluno * alunos;

    printf("\nInforme o numero de cadastros:");
    scanf("%d", &TOTAL);

    cursos = (struct Curso*)malloc(sizeof(struct Curso) * TOTAL);
    turmas = (struct Turma*)malloc(sizeof(struct Turma) * TOTAL);
    disciplinas = (struct Disciplina*)malloc(sizeof(struct Disciplina) * TOTAL);
    alunos = (struct Aluno*)malloc(sizeof(struct Aluno) * TOTAL);

       while (opc > 0){
        opc = Opcao();
        switch (opc){
        case 1:
            CadCurso(cursos, TOTAL);
            break;
        case 2:
            if(qtdCursos < 1){
                  printf("não existe um curso cadastrado.Cadastre-o primeiro!");
            }
            else{
                 qtdTurmas++;
                 CadTurma(turmas, cursos, TOTAL);

            break;
        case 3:
             if(qtdTurmas < 1){
              printf("não existe uma turma cadastrada.Cadastre-a primeiro!");
              break;
             }
             else{
               qtdDisciplinas++;
               CadDisciplina(cursos,turmas,disciplinas,TOTAL,qtdTurmas);
               break;
        case 4:
            if(qtdDisciplinas < 1){
               printf("não existe uma disciplina cadastrada.Cadastre-a primeiro!");
               break;
            }else{
                qtdAlunos++;
                CadAluno(alunos,cursos,turmas,disciplinas,TOTAL);
            break;
        case 5:
            ListarTurmas(cursos,turmas,TOTAL);
            break;
        case 6:
            ListarDisciplinas(cursos,disciplinas,turmas,TOTAL);
            break;
        case 7:
            ListarAluno(alunos,turmas,disciplinas,cursos,TOTAL);
            break;
        case 8:
            qtdCursos++;
            ListarCursos(cursos,TOTAL,qtdCursos);
            break;
        case 9:
           opc = 0;
           break;
         default :
           break;
        }
       }

    free(cursos);
    free(turmas);
    free(disciplinas);
    free(alunos);
    return 0;
}

//acabou o main
void CadCurso(struct Curso * cursos, int TOTAL)
{
    int x = 0;
    for(; x < TOTAL; x++)
    {
        printf("\nInforme o codigo do curso: ");
        scanf("%d", &cursos[x].codigo);

        printf("\nInforme o nome do curso: ");
        scanf("%s", cursos[x].nome);
       }
}
void CadTurma(struct Curso * cursos, struct Turma * turmas, int TOTAL)
{
    int x = 0;
    for(; x< TOTAL; x++)
    {
        printf("\n Informe o codigo do curso %d: ", cursos[x].codigo);
        printf("\n Informe o codigo da turma: ");
        scanf("%d", &turmas[x].codigo);
        printf("Informe o nome da turma: ");
        scanf("%s", &turmas[x].nome);
    }
}

void CadDisciplina(struct Disciplina * disciplinas,struct Turma * turmas, struct Curso * cursos, int TOTAL,int qtdTurmas)
{
    if(qtdTurmas < 1 )
    {
    printf( "Não existe turma(s) cadastradas no sistema !\n" );
    }else{

    int x = 0;
    for(; x< TOTAL; x++)

    {
        printf("\n Informe o codigo do curso %d : ", cursos[x].codigo);
        printf("\n Informe o codigo da turma %s: ");
        scanf("%d", &turmas[x].codigo);
        printf("\n Informe o codigo da disciplina: ");
        scanf("%d", &disciplinas[x].codigo);
        printf("Informe o nome da disciplina: ");
        scanf("%s",&disciplinas[x].nome);



    }
    qtdTurmas++;
}
void CadAluno(struct Aluno * alunos, struct Turma * turmas, struct Disciplina * disciplinas, struct Curso * cursos, int TOTAL)
{
int x = 0;
      for (;x < TOTAL;x++){
        printf("\n Informe a matricula do aluno:");
        scanf("%d",&alunos[x].matricula);

       printf("\n Informe o nome do aluno:");
       scanf("%s",&alunos[x].nome);

       printf("\n Informe o curso que o aluno esta inserido:");
       scanf("%d",&cursos[x].codigo);

       printf("\n Informe as disciplinas que o aluno cursa:");
        int i = 0;
         for(; i < 3;i++){
             printf("\n Codigo da disciplina:");
             scanf("%d",&disciplinas.codigo);

             printf("\n Nome da disciplina:");
             scanf("%s",&disciplinas.nome);
     }
     }

     }


void ListarAluno( struct Aluno * alunos,struct  Disciplina * disciplinas, struct Turma * turmas,struct  Curso * cursos, int qtdAlunos)
{
    if(qtdAlunos < 1 )
    {
    printf( "Não existe aluno(s) cadastrados no sistema !\n" );
    }else{
        int matriculaAluno;
         printf( "\n Matricula do aluno: " );
         scanf( "%d",&matriculaAluno);

         int i = 0;
         for(; i < qtdAlunos; i++ )
          if( alunos.matricula == matriculaAluno )
        {
    printf("Matricula: %d | Nome: %s\n", alunos.matricula, alunos.nome );
    printf("__________________________________________________");

    printf("Disciplina:\n");
    printf("Codigo da disciplina: %d \n", disciplinas.codigo);
    printf("Nome do aluno:  %s \n", disciplinas.nome);
    printf("__________________________________________________");

    printf("Turma:\n");
    printf("Codigo da Turma: %d \n", turmas.codigo);
    printf("Nome da turma:  %s \n", turmas.nome);
    printf("__________________________________________________");

    printf("Curso:\n");
    printf("Codigo do Curso: %d \n", cursos.codigo);
    printf("Nome do Curso  %s \n", cursos.nome);
    printf("__________________________________________________");
    printf("\n");
        }

    }
            }


void ListarTurmas(struct Curso * cursos,struct Turma * turmas, int qtdTurmas)
{
//verificando se a quantidade de turmas é menor que 0
    if(qtdTurmas < 1  ){
        printf( "Não existe turmas cadastradas!\n" );
    }
    //lendo o codigo do curso
    int codigoCurso;
    printf( "\n Código do Curso: " );
    scanf( "%d", &codigoCurso);
    //listando turmas
    int i = 0;
    for( i; i < qtdTurmas; i++ )
        if( turmas.codigoCurso == codigoCurso ){
            printf("Código da Turma: %d \n", turmas.codigo);
            printf("Nome da turma: %s \n", turmas.nome);

    printf("\n");
}
}
void ListarDisciplinas(struct Curso * cursos,struct Turma * turmas,struct Disciplina * disciplinas, int qtdDisciplinas)
{
    int codigoCurso = 0;
    printf( "\n Código do Curso: " );
    scanf( "%d", &codigoCurso);

    if(qtdDisciplinas < 1){
        printf( "Não existe disciplinas!\n" );
    }

    int i = 0;
    int codigoTurma = 0;
   for(; i < qtdDisciplinas; i++ )
        if( disciplinas.codigoTurma == codigoTurma ){
            printf("Código da Turma: %d \n", disciplinas.codigo);
            printf("Nome da turma:  %s \n", disciplinas.nome);

}
}
void ListarCursos(struct Curso * cursos,int qtdCursos)
{
    int codigoCurso;
    printf( "\n Código do Curso: " );
    scanf( "%d", &codigoCurso);

    if(qtdCursos < 1){
        printf( "Não existe cursos cadastrados!\n" );
    }
   int i = 0;
   for(; i < qtdCursos; i++ )
        if(cursos.codigo == codigoCurso ){
            printf("Código do Curso: %d \n", cursos.codigo);
            printf("Nome do curso:  %s \n", cursos.nome);

}
}
}

 

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Em C tudo o que for ser usado deve haver sido declarado previamente, mais que nada, porque isso implica reserva de espaços na memória, se algo não foi declarado, quer dizer que não há espaço em memória, pelo qual não pode ser armazenado nada se não há espaço reservado. Um dos problemas frequentes no seu programa é que você faz a chamada a varias funções que estão implementadas DEPOIS de main, o programa procura antes de main se a função existe, como não existe o programa gera esses erros do tipo warning: implicit declaration of function.... Para o programa é a primeira vez que ele está vendo essa função, então ele toma como se você tivesse declarando a função e não que você está invocando ela. Esse problema você resolve declarando os protótipos das funções que estiverem depois de main, antes de main ou de serem chamadas em outras funções.

Outros erros são receber estruturas por referencia e depois tentar acessar aos membros de forma minhastruct.membro quando deveria usar o operador seletor de campo da seguinte forma minhastruct->membro pois trata-se de ponteiro a struct. Revisar capitulo sobre estruturas por referencias.

Também observo que você esqueceu de fechar algumas chaves nos if-else que estão aninhados dentro do switch em main:Screenshot_2.png.e2f30f8e4693db1e491d4c85a93e1df5.png

Arrume esses erros e volte aqui se perseguir o problema.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...