Galera é o seguinte... eu uso o Dev-C++ 4.9.9.2 e quando eu ia criar algum programa, só abria um novo arquivo e começava a escrever o código. Todo o programa ficava em um único arquivo, constantes, macros, declarações e definições de funções. Tá... isso não me atrapalhava, porque eu só fazia programas pequenos, mas recentemente estou fazendo um programa que terá algumas milhares de linhas e fazer tudo em um único arquivo é um trabalho ABSURDO!
Lendo coisas picadas na internet eu vi que a galera cria projetos (não sei como funciona direito)...
O que eu estou tentando fazer é dividir o programa por funções e colocar uma biblioteca com definições de macros, protótipo de funções etc.
Ai que está o problema! Não estou conseguindo fazer isso.
Eu tinha lido algumas coisas sobre colocar #ifndef na bilbioteca, mas eu não entendi. Se alguém puder me explicar como eu faço pra criar a biblioteca eu agradeceria.
Obs1.: O erro que aparece quando eu tendo compilar o main() é: 5 In file included from C:\Documents and Settings\Administrator\Desktop\Trabalho 2\Trabalho\TESTE com biblioteca\main(teste).c
Obs2.: por favor, expliquem com detalhes.
Vou colocar o que estou fazendo:
Função main()
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include "biblioteca.h"
#define SENHA 00000000
/*Os protótipos de muitas funções estão na biblioteca xxx*/
/*variáveis para uso da função password*/
char adm[80];
char passw[9];
main()
{
/*variáveis para uso no menu principal*/
int opM,verdade=1;
/*variáveis uso geral, main()*/
/*explicação de algumas variáveis
fpB=ponteiro para arquivo, B de brinquedo
*/
int i,j,a,b,c;
char ch1,ch2;
FILE *fpB;
/*Arquivos, B de brinquedo, C de clinte*/
if((fpB=fopen("cadastroB.dat", "ab+"))==NULL){printf("\nProblema ao abrir o arquivo\n");sleep(2000);exit(1);}
while(verdade)
{
printf("\nAdministrador(1)");
printf("\nVendedor(2)");
printf("\nCliente(3)");
scanf("%d",&opM);
switch (opM)
{
case 1:
printf("\nNome do usuário: ");
fflush(stdin);
gets(adm);
printf("\nSenha: ");
for (i=0; i<8; i++)
{
*(passw+i)=ch1=getch();
if(*(passw+i)=='\r')
{
printf("\nA senha precisa ser maior\n");
printf("Senha: ");
i=-1;
continue;
}
printf("*");
}
*(passw+(i+1))='';
password();
administrador();
default:
printf("\nOp\x87\xE3o inv\x0lida, repita a opera\x87\xE3o\n");
sleep(2000);
system("cls");
}
}
system ("PAUSE");
return 0;
}
/*Definição das funções*/
/*definição adiministrador()*/
void administrador(void)
{
/*explicação de algumas variáveis
fpB=ponteiro para arquivo, B de brinquedo
*/
int opM,i,verdade[4];
tipo_brinquedo=brinquedo;
FILE *fpB;
for(i=0;i<4;i++)verdade[i]=1;
/*explicação de algums arquivos
brinquedo_CD=cadastro de brinquedos, o C não é de cliente
*/
if((fpB=fopen("brinquedo_CD.dat","ab+"))==NULL)ERROA(brinquedoC.dat);
do
{
printf("\t\tADMINISTRA\X87\AO");
printf("\n\n\t\tMENU\n\n");
printf("\nCadastrar brinquedos(1)");
printf("\nAlterar preço dos brinquedos(2)");
printf("\nRegistro de uso dos brinquedos(3)");
printf("\nRetornar ao menu principal(4)");
scanf("%d",&opM);
switch(opM)
{
case 1: do{brinquedo=cadastraB();
if(fwrite(&brinquedo, sizeof(tipo_brinquedo), 1, fpB) != 1)ERROE;
printf("Deseja cadastrar outro brinquedo? 1=sim ou 0=não: ");
scanf("%d",verdade[1]);
}while(verdade[1]);system("CLS");break;
case 4: exit(1);
default: printf("Op\x87\ inv\x0lida"); sleep(2000); system("CLS");
}
}while(verdade[0]);
fclose(fpB);
}
/*definição password()*/
void password(void)
{
char compara[9]={'0','0','0','0','0','0','0','0',''};
int comp;
comp=strcmp(passw,compara);
if(comp == 0)
printf("\nTudo certo");
}
Função administrador()
#include "biblioteca.h"
#include "cadastraB.c"
/*definição adiministrador()*/
void administrador(void)
{
/*explicação de algumas variáveis
fpB=ponteiro para arquivo, B de brinquedo
*/
int opM,i,verdade[4];
tipo_brinquedo=brinquedo;
FILE *fpB;
for(i=0;i<4;i++)verdade[i]=1;
/*explicação de algums arquivos
brinquedo_CD=cadastro de brinquedos, o C não é de cliente
*/
if((fpB=fopen("brinquedo_CD.dat","ab+"))==NULL)ERROA(brinquedoC.dat);
do
{
printf("\t\tADMINISTRA\X87\AO");
printf("\n\n\t\tMENU\n\n");
printf("\nCadastrar brinquedos(1)");
printf("\nAlterar preço dos brinquedos(2)");
printf("\nRegistro de uso dos brinquedos(3)");
printf("\nRetornar ao menu principal(4)");
scanf("%d",&opM);
switch(opM)
{
case 1: do{brinquedo=cadastraB();
if(fwrite(&brinquedo, sizeof(tipo_brinquedo), 1, fpB) != 1)ERROE;
printf("Deseja cadastrar outro brinquedo? 1=sim ou 0=não: ");
scanf("%d",verdade[1]);
}while(verdade[1]);system("CLS");break;
case 2: alteraPB();system("CLS");break;
case 3: verUB();system("CLS");break;
case 4: exit(1);
default: printf("Op\x87\ inv\x0lida"); sleep(2000); system("CLS");
}
}while(verdade[0]);
fclose(fpB);
}
Função cadastraB()
#include <stdio.h>
#include <stdlib.h>
/*definição cadastraB*/
tipo_brinquedo cadastraB(void)
{
/*explicação sobre letras usadas nas variáveis:
P=ponteiro
F=arquivo(file), tabém pode ser float
B=brinquedo
S=string
I=inteiro
*/
int i,verdade[4];
tipo_brinquedo brinquedo;
for(i=0;i<4;i++)verdade[i]=1;
system("CLS");
do{
printf("\t\tCADASTRO DE BRINQUEDOS\n\n");
printf("Nome do brinquedo: ");
fflush(stdin);
gets(brinquedo.nome);
verdade[0]=0;
}while(verdade[0]);
do{
printf("N\xa3mero do brinquedo: ");
fflush(stdin);
gets(brinquedo.numeroS);
RESTRICAO09(i,brinquedo.numeroS,brinquedo.numeroS);
brinquedo.numeroI=atoi(brinquedo.numeroS);
verdade[1]=0;
}while(verdade[1]);
do{
printff("Pre\x87 do brinquedo: ");
fflush(stdin);
gets(brinquedo.precoS);
RESTRICAO09(i,brinquedo.precoS,brinquedo.precoS);
brinquedo.precoF=atof(brinquedo.precoS);
verdade[2]=0;
}while(verdade[2]);
do{
printf("Acesso ao brinquedo (Vip, 1=sim ou 0=não): ");
fflush(stdin);
gets(brinquedo.vipS);
RESTRICAO09(i,brinquedo.vipS,brinquedo.vipS);
brinquedo.vipI=atoi(brinquedo.vipS);
verdade[3]=0;
}while(verdade[3]);
return brinquedo;
}
blioteca.h
#include <stdio.h>
#include <stdlib.h>
#include "administrador.c"
#include "cadastaB."
/*
#include "administrador.c"
#include "cadastraB.c"
#include "TrabBETA0.02(teste).c"
*/
/*Declarações de tipos*/
typedef struct tipo_brinquedo
{
char nome[80], numeroS[80], idadeS[3], vipS[2],precoS[3];
short int numeroI, idadeI, vipI;
float precoF;
};
/*Fim das declarações de tipos*/
/*====================================================================================================================================*/
/*definições*/
/*macros e afins*/
/*Algumas explicações
restrição09=restringe os valores a dígitos de 0 a 9
*/
#define RESTRICAO09(i,x,y) for(i=0;i<80;i++){if(x < 48 || y > 57){printf("S\x2 \x82 permitido n\x3meros");sleep(2000);system("CLS");continue;}}
/*Definição de erros*/
/*Algumas explicações
ERROA=erro de arquivo
ERROE=erro de escrita
*/
#define ERROA(n) printf("\nErro de abertura", n);sleep(2000);exit(1);
#define ERROE(n) printf("\nErro de escrita", n);sleep(2000);break;
/*Fim das definições de macros*/
/*====================================================================================================================================*/
/*Declarações das funções*/
/*Os espaços separam as classes, administrador, vendedor, cliente*/
/*O primeiro nome após o espaço é sempre da classe e os nomes que se seguem são funções usadas dentro da classe*/
/*Significado de alguma letras usadas no nome de funções:
B=brinquedo
C=cliente
P=preço
U=uso
*/
extern void administrador(void);
extern void password(void);
extern tipo_brinquedo cadastraB(void);
extern void alteraPB(void);
extern void verUB(void);
extern void vendedor(void);
extern void cadastroC(void);
extern void recarregarC(void);
extern void cliente(void);
/*Fim das declarações de funões*/
/*====================================================================================================================================*/
Pergunta
dark_max
Galera é o seguinte... eu uso o Dev-C++ 4.9.9.2 e quando eu ia criar algum programa, só abria um novo arquivo e começava a escrever o código. Todo o programa ficava em um único arquivo, constantes, macros, declarações e definições de funções. Tá... isso não me atrapalhava, porque eu só fazia programas pequenos, mas recentemente estou fazendo um programa que terá algumas milhares de linhas e fazer tudo em um único arquivo é um trabalho ABSURDO!
Lendo coisas picadas na internet eu vi que a galera cria projetos (não sei como funciona direito)...
O que eu estou tentando fazer é dividir o programa por funções e colocar uma biblioteca com definições de macros, protótipo de funções etc.
Ai que está o problema! Não estou conseguindo fazer isso.
Eu tinha lido algumas coisas sobre colocar #ifndef na bilbioteca, mas eu não entendi. Se alguém puder me explicar como eu faço pra criar a biblioteca eu agradeceria.
Obs1.: O erro que aparece quando eu tendo compilar o main() é: 5 In file included from C:\Documents and Settings\Administrator\Desktop\Trabalho 2\Trabalho\TESTE com biblioteca\main(teste).c
Obs2.: por favor, expliquem com detalhes.
Vou colocar o que estou fazendo:
Função main()
#include <stdio.h> #include <stdlib.h> #include <conio.h> #include <string.h> #include "biblioteca.h" #define SENHA 00000000 /*Os protótipos de muitas funções estão na biblioteca xxx*/ /*variáveis para uso da função password*/ char adm[80]; char passw[9]; main() { /*variáveis para uso no menu principal*/ int opM,verdade=1; /*variáveis uso geral, main()*/ /*explicação de algumas variáveis fpB=ponteiro para arquivo, B de brinquedo */ int i,j,a,b,c; char ch1,ch2; FILE *fpB; /*Arquivos, B de brinquedo, C de clinte*/ if((fpB=fopen("cadastroB.dat", "ab+"))==NULL){printf("\nProblema ao abrir o arquivo\n");sleep(2000);exit(1);} while(verdade) { printf("\nAdministrador(1)"); printf("\nVendedor(2)"); printf("\nCliente(3)"); scanf("%d",&opM); switch (opM) { case 1: printf("\nNome do usuário: "); fflush(stdin); gets(adm); printf("\nSenha: "); for (i=0; i<8; i++) { *(passw+i)=ch1=getch(); if(*(passw+i)=='\r') { printf("\nA senha precisa ser maior\n"); printf("Senha: "); i=-1; continue; } printf("*"); } *(passw+(i+1))=''; password(); administrador(); default: printf("\nOp\x87\xE3o inv\x0lida, repita a opera\x87\xE3o\n"); sleep(2000); system("cls"); } } system ("PAUSE"); return 0; } /*Definição das funções*/ /*definição adiministrador()*/ void administrador(void) { /*explicação de algumas variáveis fpB=ponteiro para arquivo, B de brinquedo */ int opM,i,verdade[4]; tipo_brinquedo=brinquedo; FILE *fpB; for(i=0;i<4;i++)verdade[i]=1; /*explicação de algums arquivos brinquedo_CD=cadastro de brinquedos, o C não é de cliente */ if((fpB=fopen("brinquedo_CD.dat","ab+"))==NULL)ERROA(brinquedoC.dat); do { printf("\t\tADMINISTRA\X87\AO"); printf("\n\n\t\tMENU\n\n"); printf("\nCadastrar brinquedos(1)"); printf("\nAlterar preço dos brinquedos(2)"); printf("\nRegistro de uso dos brinquedos(3)"); printf("\nRetornar ao menu principal(4)"); scanf("%d",&opM); switch(opM) { case 1: do{brinquedo=cadastraB(); if(fwrite(&brinquedo, sizeof(tipo_brinquedo), 1, fpB) != 1)ERROE; printf("Deseja cadastrar outro brinquedo? 1=sim ou 0=não: "); scanf("%d",verdade[1]); }while(verdade[1]);system("CLS");break; case 4: exit(1); default: printf("Op\x87\ inv\x0lida"); sleep(2000); system("CLS"); } }while(verdade[0]); fclose(fpB); } /*definição password()*/ void password(void) { char compara[9]={'0','0','0','0','0','0','0','0',''}; int comp; comp=strcmp(passw,compara); if(comp == 0) printf("\nTudo certo"); }Função administrador()#include "biblioteca.h" #include "cadastraB.c" /*definição adiministrador()*/ void administrador(void) { /*explicação de algumas variáveis fpB=ponteiro para arquivo, B de brinquedo */ int opM,i,verdade[4]; tipo_brinquedo=brinquedo; FILE *fpB; for(i=0;i<4;i++)verdade[i]=1; /*explicação de algums arquivos brinquedo_CD=cadastro de brinquedos, o C não é de cliente */ if((fpB=fopen("brinquedo_CD.dat","ab+"))==NULL)ERROA(brinquedoC.dat); do { printf("\t\tADMINISTRA\X87\AO"); printf("\n\n\t\tMENU\n\n"); printf("\nCadastrar brinquedos(1)"); printf("\nAlterar preço dos brinquedos(2)"); printf("\nRegistro de uso dos brinquedos(3)"); printf("\nRetornar ao menu principal(4)"); scanf("%d",&opM); switch(opM) { case 1: do{brinquedo=cadastraB(); if(fwrite(&brinquedo, sizeof(tipo_brinquedo), 1, fpB) != 1)ERROE; printf("Deseja cadastrar outro brinquedo? 1=sim ou 0=não: "); scanf("%d",verdade[1]); }while(verdade[1]);system("CLS");break; case 2: alteraPB();system("CLS");break; case 3: verUB();system("CLS");break; case 4: exit(1); default: printf("Op\x87\ inv\x0lida"); sleep(2000); system("CLS"); } }while(verdade[0]); fclose(fpB); }Função cadastraB()#include <stdio.h> #include <stdlib.h> /*definição cadastraB*/ tipo_brinquedo cadastraB(void) { /*explicação sobre letras usadas nas variáveis: P=ponteiro F=arquivo(file), tabém pode ser float B=brinquedo S=string I=inteiro */ int i,verdade[4]; tipo_brinquedo brinquedo; for(i=0;i<4;i++)verdade[i]=1; system("CLS"); do{ printf("\t\tCADASTRO DE BRINQUEDOS\n\n"); printf("Nome do brinquedo: "); fflush(stdin); gets(brinquedo.nome); verdade[0]=0; }while(verdade[0]); do{ printf("N\xa3mero do brinquedo: "); fflush(stdin); gets(brinquedo.numeroS); RESTRICAO09(i,brinquedo.numeroS,brinquedo.numeroS); brinquedo.numeroI=atoi(brinquedo.numeroS); verdade[1]=0; }while(verdade[1]); do{ printff("Pre\x87 do brinquedo: "); fflush(stdin); gets(brinquedo.precoS); RESTRICAO09(i,brinquedo.precoS,brinquedo.precoS); brinquedo.precoF=atof(brinquedo.precoS); verdade[2]=0; }while(verdade[2]); do{ printf("Acesso ao brinquedo (Vip, 1=sim ou 0=não): "); fflush(stdin); gets(brinquedo.vipS); RESTRICAO09(i,brinquedo.vipS,brinquedo.vipS); brinquedo.vipI=atoi(brinquedo.vipS); verdade[3]=0; }while(verdade[3]); return brinquedo; }blioteca.h#include <stdio.h> #include <stdlib.h> #include "administrador.c" #include "cadastaB." /* #include "administrador.c" #include "cadastraB.c" #include "TrabBETA0.02(teste).c" */ /*Declarações de tipos*/ typedef struct tipo_brinquedo { char nome[80], numeroS[80], idadeS[3], vipS[2],precoS[3]; short int numeroI, idadeI, vipI; float precoF; }; /*Fim das declarações de tipos*/ /*====================================================================================================================================*/ /*definições*/ /*macros e afins*/ /*Algumas explicações restrição09=restringe os valores a dígitos de 0 a 9 */ #define RESTRICAO09(i,x,y) for(i=0;i<80;i++){if(x < 48 || y > 57){printf("S\x2 \x82 permitido n\x3meros");sleep(2000);system("CLS");continue;}} /*Definição de erros*/ /*Algumas explicações ERROA=erro de arquivo ERROE=erro de escrita */ #define ERROA(n) printf("\nErro de abertura", n);sleep(2000);exit(1); #define ERROE(n) printf("\nErro de escrita", n);sleep(2000);break; /*Fim das definições de macros*/ /*====================================================================================================================================*/ /*Declarações das funções*/ /*Os espaços separam as classes, administrador, vendedor, cliente*/ /*O primeiro nome após o espaço é sempre da classe e os nomes que se seguem são funções usadas dentro da classe*/ /*Significado de alguma letras usadas no nome de funções: B=brinquedo C=cliente P=preço U=uso */ extern void administrador(void); extern void password(void); extern tipo_brinquedo cadastraB(void); extern void alteraPB(void); extern void verUB(void); extern void vendedor(void); extern void cadastroC(void); extern void recarregarC(void); extern void cliente(void); /*Fim das declarações de funões*/ /*====================================================================================================================================*/Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
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.