Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

FioX

Problema com Registos e Leitura de Ficheiros

Mensagens Recomendadas

FioX

Boa Tarde, estou a elaborar um projecto para a aula da programacao, sendo que o meu trabalha 'e um programa de gestao de uma companhia aerea.

Contudo quando quero listar os voos usando os dados num ficheiro e percorrer o array esta a dar sempre lista vazia quando percorro a funcao listar();

Tou seguindo um exemplo que fizemos na aula e que deu.

Meu Codigo

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
struct voo_str{
 char NomeVoo[20];
 char Destino[20];
 char Local[20];
 int tempo;
 int numero;
 int lugares;
 struct voo *proximo;
};
typedef struct voo_str voo;

voo *raiz=NULL;
FILE* fp;
voo v[100];

void listar(){
 fp=fopen("Voo.dat", "rb");
 fread(&v, sizeof(voo),1, fp);
	 voo *aux;
	 aux=raiz;

	 if(aux==NULL){// a lista esta vazia
				 printf("Lista vazia\n");
	 }else{// alista não esta vazia
		 while(aux->proximo!=NULL){//percorre e imprime
					 printf("NomeVoo:%s\nDestino:%s\nLocal:%s\nTempo:%d\nNumeroVoo:%d\nLugares:%d",aux->NomeVoo,aux->Destino,aux->Local,aux->tempo,aux->numero,aux->lugares);
				 aux=(voo *)aux->proximo;
		 }//imprime o ultimo
		 printf("NomeVoo:%s\nDestino:%s\nLocal:%s\nTempo:%d\nNumeroVoo:%d\nLugares:%d",aux->NomeVoo,aux->Destino,aux->Local,aux->tempo,aux->numero,aux->lugares);
	 }

}

int eliminarvo(int num){
 voo *aux, *aux2;
 aux=raiz;

 aux2=num;;

 if (aux2==NULL){
	 return 0;
 }else{
	 if(aux==aux2){
					 raiz=aux->proximo;
					 return 1;
	 }else {

			 while(aux->proximo!=aux2){
				 aux=aux->proximo;
			 }

			 aux->proximo=aux2->proximo;
			 free(aux2);
			 return 1;
	 }
 }


}



int main()
{
int login,password,menu,menu2,verificaread=1;
char escolha,procuravo[10];


printf("################################################################################");
printf("########Bem Vindo Ao Sistema de Gestão de Reserva e Operacoes da EasyJet########");
printf("################################################################################");
if (fp=fopen("login.dat", "rb")){ //Caso o Programa ja foi aberto anteriormente irá buscar a pw ao ficheiro binário.
fread(&password, sizeof(4), 1, fp);
fclose(fp);
}
else { //caso é o primeira vez a iniciar o programa irá pedir um PIN de 4 Numeros.
 fp=fopen("login.dat", "w+b");
 printf("O Programa esta a ser executado pela primeira vez.\nPor favor introduza um PIN de 4 Numeros\n");
 scanf("%d",&password);
 fwrite(&password, sizeof(4), 1, fp);
 fclose(fp);
}
while(login!=password) //Inicio While, Fase Login.
{
printf("#####################Se Faz Favor Introduza o Numero de Login###################");
printf("################################################################################");
printf("Numero de Login: ");
scanf("%d",&login);
printf("Verificando...\n");

if(login==password) // login com sucesso
		 {
				 printf("################################################################################");
										 printf("############Login com Sucesso, Obrigado Por Usar o Sistema de Gestao############");
				 do{
										 printf("################################################################################");
										 printf("Menu:\n1-Introduzir Vos\n2-Listar Vos\n3-Verificar Passageiros\n4-Remover Vo\nEscolha: ");
										 scanf("%d",&menu);
						 switch(menu){
									 case 1:{
										 fflush(stdin);
										 printf("################################################################################");
										 printf("############Vai Entrar no Menu Para Introduzir Um Vo, Tem a Certeza?############\nReponda com (S) ou (N)\nEscolha: ");
										 scanf("%c",&escolha);
										 if(escolha=='S'){ // If Escolha S Inicio
														 do{
																			 fflush(stdin);
																			 printf("Introduza um Novo Voo:\nNome do Voo: ");
																			 gets(v[0].NomeVoo);
																			 printf("\nIntroduza o Destino: ");
																			 gets(v[0].Destino);
																			 printf("\nIntroduza Local de Saida: ");
																			 gets(v[0].Local);
																			 fflush(stdin);
																			 printf("\nIntroduza o tempo de duração(seguindo este formato, 1000 para 10:10): ");
																			 scanf("%d",&v[0].tempo);
																			 printf("\nIntroduza o numero do Aviao: ");
																			 scanf("%d",&v[0].numero);
																			 fflush(stdin);
																			 printf("\nQuantos Lugares o aviao tem?: ");
																			 scanf("%d",&v[0].lugares);
																			 fp=fopen("Voo.dat", "a+");
																			 fwrite(&v, sizeof(voo), 1, fp);
																			 printf("\nQuer Adicionar mais algum vo?(Sim=1),(Nao=0): ");
																			 scanf("%d",&menu2);
														 }while(menu2!=0); // Fim S
														 fclose(fp);
														 break;
														 } // If Escolha S Fim

										 } // Fim Case 1


								 case 2:{
											 fflush(stdin);
											 printf("################################################################################");
											 printf("#########Vai Entrar no Menu Para Listar os Voos, Tem a Certeza?##########\nReponda com (S) ou (N)\nEscolha: ");
											 scanf("%c",&escolha);
												 if(escolha=='S'){ // If Escolha S Inicio
													 listar();
												 }
										 }



									 case 3:{
											 fflush(stdin);
											 printf("################################################################################");
											 printf("#########Vai Entrar no Menu Para Verificar Passageiros, Tem a Certeza?##########\nReponda com (S) ou (N)\nEscolha: ");
											 scanf("%c",&escolha);
												 if(escolha=='S'){ // If Escolha S Inicio
																 do{
																			 fflush(stdin);
																			 printf("\nNome do Voo: ");
																			 scanf("%d",&procuravo);
																			 fp=fopen("Voo.dat", "rb");
																								 do{
																								 fread(&v, sizeof(voo),1, fp);
																														 if(procuravo==v[0].numero)
																														 {
																																	 printf("NomeVoo:%s\nDestino:%s\nLocal:%s\nTempo:%d\nNumeroVoo:%d\nLugares:%d",v[0].NomeVoo,v[0].Destino,v[0].Local,v[0].tempo,v[0].numero,v[0].lugares);
																																	 verificaread==0;
																														 }
																														 else
																														 printf("Vo nao foi encontrado");


																								 }while(verificaread==1);
																 }while(menu2!=0);
															 }// Fim S
												 }//Fim case2
									 case 4:{
											 fflush(stdin);
											 printf("################################################################################");
											 printf("#########Vai Entrar no Menu Para Remover um Voo, Tem a Certeza?##########\nReponda com (S) ou (N)\nEscolha: ");
											 scanf("%c",&escolha);
											 if(escolha=='S'){ // If Escolha S Inicio

																 printf("Indique o Numero do Voo que quer apagar");
																 scanf("%d",&procuravo);
																 eliminarvo(procuravo);
															 }
											 }

									 } //Fim Switch Menu
						 }while(menu!=6); //Fim do While
} // Fim Login Certo
else //Falha Login
		 {
		 printf("################################################################################");
		 printf("####Numero de Login Errado Verifique o Numero Introduzido e Tenta Novamente#####");
		 printf("################################################################################");
}
} // Fim While, Fim do Login
getch();
return 0;
}

este codigo 'e o projecto.

o codigo abaixo 'e o que foi feito na escola e deu para fazer a leitura, nao encontro a falha.

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


struct aluno_str{
 char nome[20];
 int numero;
 struct aluno *proximo;
};
typedef struct aluno_str aluno;


aluno *raiz=NULL;


aluno * procuraAluno(int num){
 aluno *aux;

 aux=raiz;// por auxiliar no inicio da lista



 if(raiz!=NULL){// tem elementos na lista
	 while(aux->proximo!=NULL){
		 if(aux->numero==num){
			 return aux;				
		 }else{
			 aux=aux->proximo;	
		 }					
	 }
	 if(aux->numero==num){
			 return aux;				
		 }else{
			 return NULL;
	 }
 }else{// nao tem elementos na lista
	 return NULL;


 }

}

int eliminarAluno(int num){
 aluno *aux, *aux2;
 aux=raiz;

 aux2=procuraAluno(num);

 if (aux2==NULL){
	 return 0;
 }else{
	 if(aux==aux2){
					 raiz=aux->proximo;
					 return 1;
	 }else {

			 while(aux->proximo!=aux2){
				 aux=aux->proximo;
			 }

			 aux->proximo=aux2->proximo;
			 free(aux2);
			 return 1;
	 }
 }


}

void listar(){

	 aluno *aux;
	 aux=raiz;

	 if(aux==NULL){// a lista esta vazia
				 printf("Lista vazia");			
	 }else{// alista não esta vazia
		 while(aux->proximo!=NULL){//percorre e imprime
					 printf("aluno:%s n:%d \n", aux->nome, aux->numero);
				 aux=(aluno *)aux->proximo;
		 }//imprime o ultimo
		 printf("aluno:%s n:%d \n", aux->nome, aux->numero);			
	 }

}


void insereAluno(char *nome, int num){// insere sempre no inicio da lista
 aluno *aux;
 aluno *novo;

 aux=raiz;
 //reserva memoria para o novo registo
 novo = (aluno *)malloc(sizeof(aluno));

 //preenche os campos do registo novo
 strcpy(novo->nome,nome);
 novo->numero=num;

 if (aux==NULL){// a lista esta vazia
				 raiz=novo;
				 novo->proximo=NULL;
 }else{// caso a lista nao esteja vazia
	 novo->proximo=raiz;
	 raiz=novo;

 }
}

void insereAlunoatras(char *nome, int num){
 aluno *aux;
 aluno *novo;

 aux=raiz;
 novo = (aluno *)malloc(sizeof(aluno));

 strcpy(novo->nome,nome);
 novo->numero=num;
 novo->proximo=NULL;

 if (aux==NULL){
				 raiz=novo;

				 novo->proximo=NULL;
 }else{
 while(aux->proximo!=NULL){
				 aux=(aluno *)aux->proximo;
		 }
 aux->proximo=novo;

 }
}
main(){
 aluno *aux, *alunoprocurado;
 int sucesso;
 char teste[20];


 printf("tamanho do registo aluno %d bytes", sizeof(aluno));

 getch();


 insereAluno("pedro", 70);	
 insereAluno("Maria", 20);
 insereAluno("jose", 30);

 insereAlunoatras("pedro11", 100);
 insereAlunoatras("maria22", 50);
 insereAlunoatras("jose22", 90);

 listar();	

 alunoprocurado=procuraAluno(20);

 if(alunoprocurado==NULL){
	 printf("ERRO PROCURAR: nao existe nenhum aluno com esse numero\n");										
 }else{
	 printf("\n\ntem o nome %s\n", alunoprocurado->nome );
 }

 sucesso=eliminarAluno(20);

 if(sucesso==0){
	 printf("ERRO ELIMINAR:nao existe nenhum aluno com esse numero\n");										
 }else{
	 printf("aluno eliminado com sucesso" );
 }
 listar();

 getch();
 }

Muito Obrigado pelo vosso tempo!

Editado por FioX
Falta LP no GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.