hellnux
(usa Kurumin)
Enviado em 05/10/2005 - 17:31h
Olá.
Meu professor de programação passou o seguinte código, do qual foi necessário 3 dias de aulas para passar ele por completo, por este motivo ele não explicou muito sobre os comandos envolvidos no código-fonte.
Eu tento compilar ele com o gcc, mas retorna o seguinte erro:
----------
kurumin@kurumin:~$ gcc struct.c -o struct
struct.c:63: error: conflicting types for `abrir'
struct.c:22: error: previous declaration of `abrir'
struct.c:277:10: warning: no newline at end of file
----------
O que posso fazer???
------------------------
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>
struct registro{
char nome[40];
char rua[40];
char bairro[20];
char fone[15];
char status[1];
}reg;
FILE*fp;
/*prototipos das funções*/
void incluir(void),
consultar(void),
excluir(void),
alterar(void),
abrir(void),
listar(void);
/*fim prototipo*/
/*int para devc troca por viod*/
int main(void){/*a*/
char opcao[2],op;
do{/*b*/
do{/*c*/
void clrscr();
printf("\nCadastro de endere‡os\n");
printf("\nDigite uma das opcoes\n\n");
printf("\n i -incluir");
printf("\n a -alterar");
printf("\n e -excluir");
printf("\n c -consultar");
printf("\n l -listar");
printf("\n s -sair");
printf("\nopcao:");
gets(opcao);
op=tolower(*opcao);
}while(!strchr("iaesls",op));/*c*/
switch(op)
{/*d*/
case'i':incluir();break;
case'a':alterar();break;
case'e':excluir();break;
case'c':consultar();break;
case'l':listar();break;
case's':exit(0);
}/*d*/
}while(1);/*b*/
return(0);
}/*a*/
/*programa principal acima*/
/*primeira função*/
int abrir (char tipo[3])
{
if ((fp=fopen("clientes.dat",tipo)) == NULL)
{
printf("\n O arquivo nao pode ser aberto!!\n");
__fpurge(stdin);
getchar();
exit(1);
}
return(0);
}/*fechando a primeira função*/
/*segunda função*/
void incluir(void){
abrir("ab+");
fseek(fp,0L,SEEK_END);
printf("Digite o nome ou <FIM> para sair \n");
gets(reg.nome);
while((strcmp(reg.nome,"fim")!=0)&&(strcmp(reg.nome,"FIM")!=0))
{
printf("\n Rua:");gets(reg.rua);
printf("\n Bairro:");gets(reg.bairro);
printf("\n Fone:");gets(reg.fone);
strcpy(reg.status,"1");
if(fwrite(®,sizeof(struct registro),1,fp)!=1)
{
printf("\n Erro de grav‡ao!!");
__fpurge(stdin);
getchar();
}else{
printf("\n grava‡ao feita com sucesso...\n\n");
}
printf("\n Digite o nome ou <FIM>para sair \n");
gets(reg.nome);
}
fclose(fp);
}
/* 22/09/2005 */
int busca (void){
int achou=-1,posicao=0;
char nomep[40];
abrir("rb");
printf("\n Digite o nome a ser procurado:");
gets(nomep);
rewind(fp); //posiciona o ponteiro no come‡o do arquivo
while((!feof(fp))&&(achou==-1))
{
fread(®,sizeof(struct registro),1,fp);
// na 2 execucao, o fread aponta p/ o proximo registro
if(!feof(fp))
{ if(strcmp(nomep,reg.nome)== 0) //se for V retorna '0'
{ if(reg.status=="0")
{ posicao=-2; } // o q vc procura esta com status 0
achou=-1; // -1 e q achou
} else{ posicao++; }
} else{ posicao=-1; }
}
if(achou==-1)
{ posicao=-1; }
fclose(fp); //fecha o arquivo no end do ponteiro
return(posicao);
} /*** FIM ***/
void consultar (void){
int pos;
pos=busca();
if(pos==-1)
{
printf("\n Nome inexistente no arquivo!");
__fpurge(stdin);
getchar();
}else if(pos==-2){
printf("\n Nome excluido do arquivo");
__fpurge(stdin);
getchar();
}else{
abrir("rb+");
fseek(fp,pos*sizeof(struct registro),SEEK_SET);
/*
aponte a partir do começo,numero da pos * 116
se fp=1000 e numero da poscicao=0
1000+0=100
*/
fread(®,sizeof(struct registro),1,fp);
printf("\n Nome: %s",reg.nome);
printf("\n Rua: %s",reg.rua);
printf("\n Bairro: %s",reg.bairro);
printf("\n Fone: %s",reg.fone);
__fpurge(stdin);
getchar();
}
fclose(fp);
} /*** FIM ***/
void alterar(void){
int pos;
pos=busca();
if(pos==-1)
{
printf("\n Nome inexistente no arquivo!");
__fpurge(stdin);
getchar();
}else if(pos==-2){
printf("\n Nome excluido do arquivo");
__fpurge(stdin);
getchar();
} else {
abrir("rb+");
fseek(fp,pos*sizeof(struct registro),SEEK_CUR);
printf("\n Certifique que vcrealmente e este registro que vc deseja alterar...");
printf("\n Nome: %s",reg.nome);
printf("\n Rua: %s",reg.rua);
printf("\n Bairro: %s",reg.bairro);
printf("\n Fone: %s",reg.fone);
__fpurge(stdin);
getchar();
printf("\n Digite as informaoes corretas:");
printf("\n Nome:"); gets(reg.nome);
printf("\n Rua:"); gets(reg.rua);
printf("\n Bairro:"); gets(reg.bairro);
printf("\n Fone:"); gets(reg.fone);
strcpy(reg.status,"1"); //ou reg.status='1';
fseek(fp,pos*sizeof(struct registro),SEEK_SET);
if(fwrite(®,sizeof(struct registro),1,fp)!=1)
{
printf("\n ERRO DE GRAVACAO...");
__fpurge(stdin);
getchar();
}else{
printf("\n Regravacao feita com sucesso...");
__fpurge(stdin);
getchar();
}
}
fclose(fp);
} /*** FIM ***/
/*
SEEK_SET - onde eu quero
CUR - começo
END - final
*/
void listar (void){
int cont;
abrir("rb+");
fseek(fp,0L,SEEK_SET);
while(!feof(fp)){
fread(®,sizeof(struct registro),1,fp);
if(reg.status!="0")
{
printf("\n Nome: %s",reg.nome);
printf("\n Rua: %s",reg.rua);
printf("\n Bairro: %s",reg.bairro);
printf("\n Fone: %s",reg.fone);
getch(); cont++;
}
} /*while*/
printf("\n #REGISTROS= %d",cont);
__fpurge(stdin);
getchar();
} /*listar()*/
void excluir (void){ /* A */
int pos;
pos=busca();
if(pos==-1)
{
printf("\n NOME EXISTENTE NO ARQUIVO");
__fpurge(stdin);
getchar();
} else
{ /* B */
if(pos==-2)
{
printf("\n NOME EXCLUIDO DO ARQUIVO");
__fpurge(stdin);
getchar();
} else
{ /* C */
abrir("rb+");
fseek(fp,pos*sizeof(struct registro),SEEK_SET);
/*
rewind pode substituir o fseek q posiciona no começo
e o rewind na pos corrente
*/
fread(®,sizeof(struct registro),1,fp);
printf("\n Nome: %s",reg.nome);
printf("\n Rua: %s",reg.rua);
printf("\n Bairro: %s",reg.bairro);
printf("\n Fone: %s",reg.fone);
printf("\n ESTE REGISTRO # %d SERA EXCLUIDO!",(pos+1));
__fpurge(stdin);
getchar();
strcpy(reg.status,"0"); //
fseek(fp,pos*sizeof(struct registro),SEEK_SET);
if(fwrite(®,sizeof(struct registro),1,fp)!=1)
{
printf("\n ERRO NA GRAVACAO...");
__fpurge(stdin);
getchar();
} else
{
printf("\n EXCLUSAO FEITA COM SUCESSO!");
__fpurge(stdin);
getchar();
}
} /* C */
} /* B */
fclose(fp);
} /* A */
--------------------------------
Qualquer coisa posso enviar o código por e-mail.Obrigado.
HeLLnuX Linuxzando...
Até.