int menu();
void grava();
int abre();
void cadastro();
void exclui();
void lista();
int main (){
int aux;
while(verdadeiro){
aux=menu();
for(;;){
printf("%d",aux);
if(aux==1){
cadastro( );
break;
}
if(aux==2){
grava();
break;
}
if(aux==3){
abre();
break;
}
if(aux==4){
exclui();
break;
}
if(aux==5){
lista();
break;
}
if(aux==6){
exit(0);
}
else
printf("\n Entre com uma opcao de 1 a 7.\n");
system ("pause");
}
}
}
int menu(){
inicio=ultimo=NULL;
int i,n;
system("cls");
printf("\n\n\t\t MENU\n\n");
printf("\t1. Cadastra dados\n");
printf("\t2. Grava em arquivo\n");
printf("\t3. Abre arquivo\n");
printf("\t4. Exclui\n");
printf("\t5. Lista\n");
printf("\t6. Sai\n");
while(verdadeiro){
printf("\n\n\tentre com a opcao:");
fflush(stdin);
n=scanf("%d",&i);
if (!n)
printf("\n Entrada errada\n");
else break;
}
return i;
}
void cadastro(int i){
struct estacionamento *p;
int comp;
system ("cls");
printf("\n\n\t\t cadastro\n\n");
printf("\n Tecle ENTER sobre o campo nome para sair: \n");
for(;;){
void listaligada(struct estacionamento *p){
if(inicio==NULL){
ultimo=p;
inicio=p;
p->proximo=NULL;
p->anterior=NULL;
return;
}
ultimo ->proximo=p;
p->anterior=ultimo;
ultimo=p;
}
void grava (){
struct estacionamento *p;
FILE *fp;
int i=0;
char arq[40];
system ("cls");
printf("\n\n\t\t Grava em arquivo\n\n");
printf("\n Entre com o nome do arquivo:");
fflush(stdin);
gets (arq);
if((fp=fopen(arq,"wb"))==NULL){
printf("\n não pode abrir o arquivo %s\n",arq);
system ("pause");
return;
}
p=inicio;
while (p != NULL){
fwrite(p,sizeof(struct estacionamento),1,fp);
p= p->proximo;
i++;
}
fclose(fp);
printf("\n Foram gravados %d registros \n",i);
system ("pause");
}
int abre(){
struct estacionamento *p;
FILE *fp;
int i=0;
char arq[40];
system ("cls");
printf("\n\n\t\t Abre o arquivo \n\n");
printf("\n Entre com o arquivo:");
fflush(stdin);
gets (arq);
if ((fp=fopen(arq,"rb"))==NULL){
printf("\n não pode abrir o arquivo %s\n",arq);
system ("pause");
return;
}
p=inicio;
while(p!=NULL){
free(p);
p=p->proximo;
}
inicio=ultimo=NULL;
p=(struct estacionamento *)malloc(sizeof(struct estacionamento));
while(fread(p,sizeof(struct estacionamento),1,fp) !=0){
listaligada(p);
p=(struct estacionamento *)malloc(sizeof(struct estacionamento));
i++;
}
fclose(fp);
printf("\n foram lidos %d registros \n",i);
system ("pause");
return (i);
}
void lista (){
struct estacionamento *p;
int codigo;
system("cls");
printf("\n\n\t\t LISTA\n\n");
p=inicio;
while(p != NULL){
printf("\n\t nome:\t %d",p->nome);
printf("\n\t telefone:\t\t %d",p->telefone);
printf("\n\t modelo:\t\t %s",p->modelo);
printf("\n\t placa:\t\t %.s",p->placa);
printf("\n\t \t %.s",p->entradad);
printf("\n\t \t %.s",p->entradah);
printf("\n_______________________________\n");
p=p->proximo;
}
system("pause");
}
void exclui(){
struct estacionamento *p,*p1,*p2;
int achou=0,codigo;
system("cls");
printf("\n\n\t\t Exclui \n\n");
printf("\n Entre com o codigo do registro a excluir \n");
scanf("%d",&codigo);
p=inicio;
while (p!=NULL){
if (p->codigo==codigo){
achou =1;
if (p->anterior==NULL)
if (p->proximo==NULL)
inicio=ultimo=NULL;
free(p);
break;
}
p=p->proximo;
}
if (achou ==0)
printf("\n codigo %d não localizado\n",codigo);
else
printf("\n Sucesso. Registro codigo %d excluido\n",codigo);
system ("pause");
Pergunta
Davi Neves
estou fazendo uma lista encadeada ,e tenho que gravar cadastros em .txt ,porem quando eu crio o arquivo ele fica em branco.
#include<stdio.h>
#include<stdlib.h>
#include <time.h>
#define verdadeiro 1
int codigo()
{
int x;
srand((unsigned)time(NULL));
x=rand()%100+1;
return x;
}
struct estacionamento{
char nome[40],modelo[40],placa[7],entradad[10],entradah[10];
int codigo,telefone;
struct estacionamento *proximo,*anterior;
};
struct estacionamento *inicio,*ultimo;
void listaligada(struct estacionamento *);
int menu();
void grava();
int abre();
void cadastro();
void exclui();
void lista();
int main (){
int aux;
while(verdadeiro){
aux=menu();
for(;;){
printf("%d",aux);
if(aux==1){
cadastro( );
break;
}
if(aux==2){
grava();
break;
}
if(aux==3){
abre();
break;
}
if(aux==4){
exclui();
break;
}
if(aux==5){
lista();
break;
}
if(aux==6){
exit(0);
}
else
printf("\n Entre com uma opcao de 1 a 7.\n");
system ("pause");
}
}
}
int menu(){
inicio=ultimo=NULL;
int i,n;
system("cls");
printf("\n\n\t\t MENU\n\n");
printf("\t1. Cadastra dados\n");
printf("\t2. Grava em arquivo\n");
printf("\t3. Abre arquivo\n");
printf("\t4. Exclui\n");
printf("\t5. Lista\n");
printf("\t6. Sai\n");
while(verdadeiro){
printf("\n\n\tentre com a opcao:");
fflush(stdin);
n=scanf("%d",&i);
if (!n)
printf("\n Entrada errada\n");
else break;
}
return i;
}
void cadastro(int i){
struct estacionamento *p;
int comp;
system ("cls");
printf("\n\n\t\t cadastro\n\n");
printf("\n Tecle ENTER sobre o campo nome para sair: \n");
for(;;){
// p->codigo=codigo();
//printf("codigo: %d",p->codigo);
printf("\n Nome %d: ",i+1);
fflush(stdin);
p=(struct estacionamento *)malloc(sizeof(struct estacionamento));
gets(p->nome);
if(!p->nome[0])
break;
printf("\n telefone %d: ",i+1);
fflush(stdin);
scanf("%d",&p->telefone);
printf("\n modelo %d: ",i+1);
fflush(stdin);
gets(p->modelo);
printf("\n Placa: ");
fflush(stdin);
gets(p->placa);
printf("\n Entrada: ");
_strdate(p->entradad);
_strtime(p->entradah);
printf("%s %s",p->entradad,p->entradah);
p->codigo=i;
listaligada(p);
}
}
void listaligada(struct estacionamento *p){
if(inicio==NULL){
ultimo=p;
inicio=p;
p->proximo=NULL;
p->anterior=NULL;
return;
}
ultimo ->proximo=p;
p->anterior=ultimo;
ultimo=p;
}
void grava (){
struct estacionamento *p;
FILE *fp;
int i=0;
char arq[40];
system ("cls");
printf("\n\n\t\t Grava em arquivo\n\n");
printf("\n Entre com o nome do arquivo:");
fflush(stdin);
gets (arq);
if((fp=fopen(arq,"wb"))==NULL){
printf("\n não pode abrir o arquivo %s\n",arq);
system ("pause");
return;
}
p=inicio;
while (p != NULL){
fwrite(p,sizeof(struct estacionamento),1,fp);
p= p->proximo;
i++;
}
fclose(fp);
printf("\n Foram gravados %d registros \n",i);
system ("pause");
}
int abre(){
struct estacionamento *p;
FILE *fp;
int i=0;
char arq[40];
system ("cls");
printf("\n\n\t\t Abre o arquivo \n\n");
printf("\n Entre com o arquivo:");
fflush(stdin);
gets (arq);
if ((fp=fopen(arq,"rb"))==NULL){
printf("\n não pode abrir o arquivo %s\n",arq);
system ("pause");
return;
}
p=inicio;
while(p!=NULL){
free(p);
p=p->proximo;
}
inicio=ultimo=NULL;
p=(struct estacionamento *)malloc(sizeof(struct estacionamento));
while(fread(p,sizeof(struct estacionamento),1,fp) !=0){
listaligada(p);
p=(struct estacionamento *)malloc(sizeof(struct estacionamento));
i++;
}
fclose(fp);
printf("\n foram lidos %d registros \n",i);
system ("pause");
return (i);
}
void lista (){
struct estacionamento *p;
int codigo;
system("cls");
printf("\n\n\t\t LISTA\n\n");
p=inicio;
while(p != NULL){
printf("\n\t nome:\t %d",p->nome);
printf("\n\t telefone:\t\t %d",p->telefone);
printf("\n\t modelo:\t\t %s",p->modelo);
printf("\n\t placa:\t\t %.s",p->placa);
printf("\n\t \t %.s",p->entradad);
printf("\n\t \t %.s",p->entradah);
printf("\n_______________________________\n");
p=p->proximo;
}
system("pause");
}
void exclui(){
struct estacionamento *p,*p1,*p2;
int achou=0,codigo;
system("cls");
printf("\n\n\t\t Exclui \n\n");
printf("\n Entre com o codigo do registro a excluir \n");
scanf("%d",&codigo);
p=inicio;
while (p!=NULL){
if (p->codigo==codigo){
achou =1;
if (p->anterior==NULL)
if (p->proximo==NULL)
inicio=ultimo=NULL;
free(p);
break;
}
else{
inicio=p->proximo;
inicio->anterior=NULL;
free(p);
}
if(p->proximo==NULL){
ultimo=p->anterior;
ultimo->proximo=NULL;
free(p);
break;
}else{p1=p->anterior;
p2=p->proximo;
p1->proximo=p2;
p2->anterior=p1;
free(p);
break;
}
p=p->proximo;
}
if (achou ==0)
printf("\n codigo %d não localizado\n",codigo);
else
printf("\n Sucesso. Registro codigo %d excluido\n",codigo);
system ("pause");
}
Link para o comentário
Compartilhar em outros sites
1 resposta 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.