Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Nilson Arcuri

Parte de pesquisa esta travando

Recommended Posts

Bom dia pessoal, fiz este programa para um trabalho e o mesmo está funcionando " " algumas funções, mas quando seleciono a opção 2 ele trava...

Alguem poderia dar uma mãozinha...

 

E se alguem tiver um método mais eficaz por favor mencione...

 

Obs.: Lembrando que tenho q usar o método de SUB-ROTINAS.

 

Obrigado

 

 

 

#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>struct CAD_AGENDA{	   char nome[40];	   char endereco[60];	   int  telefone;	 };struct  CAD_AGENDA agenda[5];int CADASTRO(){	  int i;	  for (i=0;i<5;i++){		printf("Entre com Nome %da pessoa:\n",i+1);		gets(agenda[i].nome);		printf("Entre o Endereço da %da pessoa :\n",i+1);		gets(agenda[i].endereco);		printf("Entre o Telefone da %da pessoa:\n",i+1);		scanf("%d",&agenda[i].telefone);	 };  };int BUSCA(){	int i,acha;	char nomepesq[40];	printf("Digite sua pesuisa (Nome)\n\n");	gets(nomepesq);	i=0;	acha=0;	while((acha==0)&&(i<5)){		if (strcmp(agenda[i].nome,nomepesq)==0){			acha==1;		}else{			i=i+1;		};	};		if (acha==1){		printf("%s o registro desejado esta na %d posicao\n\n\n",nomepesq,i+1);	}else{		printf("%s nao existe esse arquivo\n",nomepesq);	 };  };int ORDENAR(){	int i,j,aux;	char nomeaux[40],endaux[60];	for (i=0;i<9;i++){		for(j=i+1;j<5;j++){			if(strcmp(agenda[i].nome,agenda[j].nome)>0){				strcpy(nomeaux,agenda[i].nome);				strcpy(agenda[i].nome,agenda[j].nome);				strcpy(agenda[j].nome,nomeaux);			};		};	};};int MOSTRAR(){	int i;	for(i=0;i<5;i++){		printf("%da pessoa\n");		printf("Nome: %s\n",agenda[i].nome);		printf("Endereco: %s\n",agenda[i].endereco);		printf("Telefone: %d\n\n",agenda[i].telefone);	};}; int main(){	int i,opcao;	do{		   printf("--------------Menu Principal---------------------- \n");		   printf("-		 Escolha uma opcao abaixo:			  - \n");		   printf("-												- \n");		   printf("-			 1 - Cadastrar contatos			 - \n");		   printf("-			 2 - Pesquisar contato			  - \n");		   printf("-			 3 - Ordenar contatos			   - \n");		   printf("-			 4 - Exibir contatos				- \n");		   printf("-			 5 - Sair						   - \n");		   printf("-------------------------------------------------- \n");		   scanf("%d",&opcao);		   if (opcao != 5) {			  switch(opcao) {			  case 1:				   CADASTRO();				   break;			  case 2:				   BUSCA();				   break;			  case 3:				   ORDENAR();				   break;			  case 4:				   MOSTRAR();				   break;			 default:					 printf("\n			************************* ");					 printf("\n			***  Digite novamente *** ");					 printf("\n			*************************\n\n\n\n ");					 getche();	   }	 }  }while (opcao!=5);}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é cara, a função gets tem um bug. Nunca use ela, eu te aconselho a usar fgets. Não compilei seu código, mais muito provavelmente o gets está estourando alguns dos buffers ai e ta dando este problema.

 

 

Utilize fgets para ler as strings, a sintaxe é assim:

 

fgets(string, tamanho_a_ser_lido, local de onde ler);

 

você poderia fazer assim no seu código:

 

fgets(agenda.nome,40,stdin); /* le 40 chars da entrada padrao e guarda em agenda.nome*/

Compartilhar este post


Link para o post
Compartilhar em outros sites

#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>struct CAD_AGENDA{	   char nome[40];	   char endereco[60];	   int  telefone;	 };struct  CAD_AGENDA agenda[5];int CADASTRO(){	  int i;	  for (i=0;i<5;i++){		fflush(stdin);		printf("Entre com Nome %da pessoa:\n",i+1);		fgets(agenda[i].nome,40,stdin);		printf("Entre o Endereço da %da pessoa :\n",i+1);		fgets(agenda[i].endereco,60,stdin);		printf("Entre o Telefone da %da pessoa:\n",i+1);		scanf(" %d",&agenda[i].telefone);	 };  };int BUSCA(){	int i,acha;	char nomepesq[40];	printf("Digite sua pesquisa (Nome)\n\n");	fflush(stdin);	fgets(nomepesq,40,stdin);	i=0;	acha=0; /* AKI TAVA O ERRO, tava acha==1, dai a condicao de parada nunca ia ser satisfeita */	while((acha==0)&&(i<5)){		if (strncmp(agenda[i].nome,nomepesq,40)==0){			acha=1;		}else{			i++;		}	}		if (acha==1){		printf("%s o registro desejado esta na %d posicao\n\n\n",nomepesq,i+1);	}	else	{		printf("%s nao existe esse arquivo\n",nomepesq);	}}int ORDENAR(){	int i,j,aux;	char nomeaux[40],endaux[60];	for (i=0;i<9;i++){		for(j=i+1;j<5;j++){			if(strncmp(agenda[i].nome,agenda[j].nome,40)>0){				strcpy(nomeaux,agenda[i].nome);				strcpy(agenda[i].nome,agenda[j].nome);				strcpy(agenda[j].nome,nomeaux);			}		}	}}int MOSTRAR(){	int i;	for(i=0;i<5;i++){		printf("%da pessoa\n");		printf("Nome: %s\n",agenda[i].nome);		printf("Endereco: %s\n",agenda[i].endereco);		printf("Telefone: %d\n\n",agenda[i].telefone);	};}; int main(){	int i,opcao;	do{		   printf("--------------Menu Principal---------------------- \n");		   printf("-		 Escolha uma opcao abaixo:			  - \n");		   printf("-												- \n");		   printf("-			 1 - Cadastrar contatos			 - \n");		   printf("-			 2 - Pesquisar contato			  - \n");		   printf("-			 3 - Ordenar contatos			   - \n");		   printf("-			 4 - Exibir contatos				- \n");		   printf("-			 5 - Sair						   - \n");		   printf("-------------------------------------------------- \n");		   scanf("%d",&opcao);		   if (opcao != 5) {			  switch(opcao) {			  case 1:				   CADASTRO();				   break;			  case 2:				   BUSCA();				   break;			  case 3:				   ORDENAR();				   break;			  case 4:				   MOSTRAR();				   break;			 default:					 printf("\n			************************* ");					 printf("\n			***  Digite novamente *** ");					 printf("\n			*************************\n\n\n\n ");					 getche();	   }	 }  }while (opcao!=5);}

O erro tava em:

 

dps da pesquisa das strings você tava colocando acha==1; onde o correto eh acha=1;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.