Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Separar arquivos no C

Eu tento compilar os arquivos no DevC++ e é me apresentado erro de referência. Porém quero aprender a maneira correta de dividir tais arquivos independente da IDE ou compilador que irei usar.

Esse é meu arquivo main

#include "tipos.h"

int main(){

    int opcao;
    tListaCursos lCursos;
    inicializarListaCurso(&lCursos);

    do {
        printf("\n 1 - Inserir Curso");
        printf("\n 2 - Consultar curso cadastrado");
        printf("\n 3 - Apresentar cursos cadastrados");
        printf("\n 4 - Excluir curso");
        printf("\n 0 - Sair");
        printf("\n Escolha uma opcao: ");
        scanf("%d", &opcao);
        switch(opcao){
            case 1: inserirListaCursoOrdenado(&lCursos); break;
            //case 2: consultar(&); break;
            case 3: apresentarLista(&lCursos); break;
            //case 4: inserirDesconto(&); break;
            //case 5: excluir(&tProduto); break; 
        }

    } while (opcao != 0);
}

Esse é meu arquivo tipos.h

#ifndef _tipos_
#define _tipos_

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

typedef struct tipoCurso{
    char cod_curso[10];
    char nomeCurso[40];
    int duracaoCurso;
}tCurso;

//===================================================================//

typedef struct tipoListaCurso{
    tCurso listaCursos[100];
    int tamListaCursos;
}tListaCursos;

//===================================================================//
void limpaTela();
void inicializarListaCursos(tListaCursos *p);
void inserirListaCursoOrdenado(tListaCursos *p);

#endif

Esse arquivo é onde guardo minhas funções

#ifndef
#include "tipos.h"

void limpaTela(){
    system("@cls||clear");
}

void inserirListaCursoOrdenado(tListaCursos *p){
    limpaTela();
    if (p->tamListaCursos == 100){
        printf("\n Lista cheia");
    }
    else {
        tCurso novoCurso;

        printf("\n Informe Codigo Curso: ");
        fflush(stdin);
        gets(novoCurso.cod_curso);

        printf("\n Informe o nome do Curso: ");
        fflush(stdin);
        gets(novoCurso.nomeCurso);

        printf("\n Informe a duracao do Curso: ");
        scanf("%d", &novoCurso.duracaoCurso);

        if(p->tamListaCursos == 0){
            p->listaCursos[0] = novoCurso;
        }
        else {
            if(strcmp(novoCurso.nomeCurso, p->listaCursos[p->tamListaCursos-1].nomeCurso)){
                p->listaCursos[p->tamListaCursos] = novoCurso;
            }
            else{
                int i;
                for(i = 0; i < p->tamListaCursos; i++){
                    if(strcmp(p->listaCursos[i].nomeCurso, novoCurso.nomeCurso) > 0){
                        break;
                    }
                }

                int j;
                for(j = p->tamListaCursos; j > i; j--){
                    p->listaCursos[j] = p->listaCursos[j-1];
                }

                p->listaCursos[i] = novoCurso;
            }
        }
        p->tamListaCursos++;
    }
}

void apresentarLista (tListaCursos *p){

    if (p->tamListaCursos == 0){
        printf("\n Lista Vazia");

    } else {
        int i;
        for (i=0; i < p->tamListaCursos; i++){
            printf("\n Codigo: %s",p->listaCursos[i].cod_curso);
            printf("\n Nome: %s",p->listaCursos[i].nomeCurso);
            printf("\n Duracao: %d",p->listaCursos[i].duracaoCurso);
        }
    }
}

void inicializarListaCurso(tListaCursos *p){
    p->tamListaCursos = 0;
}
#endif
2 respostas
solução!

Fala ai Thiago, de boa ?

Cara vi que tá uma semana preso nesse dilema, será que conseguiu resolver e aprender ? Se sim, compartilha o conhecimento aprendido ?

Fala Matheus, suave e você? Ainda não consegui resolver este problema, não sei se é um problema diretamente com a IDE ou com a sintaxe dos Header Files. Se tiver alguma dica fico grato, ainda não testei no GCC para ter certeza se o problema é com a IDE que não reconhece os outros arquivos pertencentes ao projeto.