Ir para conteúdo

POWERED BY:

Arquivado

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

ralecsander

Busca por nome

Recommended Posts

esta é somente uma parte do codigo...

 

o codigo completo possui cadastro, consulta geral e consulta por nome.

 

eu consegui fazer os dois primeiros (cadastro e consulta geral) em forma de função.

 

pois bem pessoal, estou encontrando dificuldades na hora de realizar a consulta por nome.

em que:

o usuario digite o nome "fulano" e o sistema diga a media dele e a situação do mesmo (aprovado, reprovado).

 

dêem uma olha no código abaixo:

 

int consultarnome() {
	FILE *p;
	float n1, n2, media;
	char nome[20];
	int reg=0;
   ;
	
	p = fopen("dados.001","rt");
	if (p == NULL)
	   
	{
		  printf("\n arquivo não existe e deve ser criado...\n");
		  goto FIM;
	}
	printf(" \t\t	C O N S U L T A   P O R  N O M E \n\n");
	printf("Digite o nome que deseja consultar:  ");
	scanf("%s", nome);
	
	while (!feof(p))
	{
		  if (nome==nome){
		  
		  scanf("%s %f %f", nome, &n1, &n2);
		  printf(" \n\nNOME: %s\t",  nome);
		  media = (n1 + n2) / 2;
		  
		  if (media>=7.0)
			 printf("\nMEDIA: %.2f\nSITUACAO: Aprovado", media);
		  else
			  if (media< 3.0)
				 printf("\nMEDIA: %.2f\nSITUACAO: Reprovado", media);
			  else
				  printf("\nMEDIA: %.2f\nSITUACAO: Exame", media);
				  printf("\n");
		  } else
		  printf("nome não existe");break;		   
	}
	fclose(p);
FIM:
printf("\n\n \t\tDigite qualquer tecla para voltar ao menu...");
system("pause>null");
return(0);
}

Se alguem puder me ajudar eu ficaria agradecido

Desde já Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

;

 

???

 

 

p = fopen("dados.001","rt");
if (p == NULL)

{
	  printf("\n arquivo não existe e deve ser criado...\n");
	  goto FIM;
}

 

CaPoTo!!! (Como dizem na comunidade "Anão vestido de palhaço mata 8")

Se você está começando, não use GOTO, embora isso seja útil quando o fluxo tem um monte de while aninhado e condições bizarras e enormes.

NOTA: leia o pdf enorme sobre arquivos nesse fórum e evite o printf.

 

scanf("%s", nome);

while (!feof(p))
{
	  if (nome==nome){

	  scanf("%s %f %f", nome, &n1, &n2);
	  printf(" \n\nNOME: %s\t",  nome);
	  media = (n1 + n2) / 2;

 

Se você leu o nome, então por que comparar com ele próprio?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sobre o goto...

Em minha concepção o goto é muito bem vindo nesse caso, pois pra que colocar uma infinidade de condições que deixa o processo mais lento sendo que eu posso agiliza-lo?

 

Sobre a segunda parte.

Estou querendo comparar o nome que a pessoa digitou com o nome contido dentro do arquivo gravado.

 

Deste jeito que está o código sempre está retornando o primeiro nome da lista, ou seja, ele não ta fazendo a busca completa dentro do arquivo que está sendo aberto.

 

Aguem tem alguma sugestão?

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites
Sobre o goto...

Em minha concepção o goto é muito bem vindo nesse caso, pois pra que colocar uma infinidade de condições que deixa o processo mais lento sendo que eu posso agiliza-lo?

 

Pra quê enfiar um goto se um if faz o trabalho?

E note que normalmente 0 é retornado indicando sucesso.

 

 

p = fopen("dados.001","rt");
if (p == NULL)  {
	  printf("\n arquivo não existe e deve ser criado...\n");
	  exit(1);
}

 

 

FIM:
printf("\n\n \t\tDigite qualquer tecla para voltar ao menu...");
system("pause>null");
return(0);
}

 

E suponho que para retornar ao menu você iria criar uma label MENU: e enfiar um goto abaixo do printf... ;)

 

 

 

Sobre a segunda parte.

Estou querendo comparar o nome que a pessoa digitou com o nome contido dentro do arquivo gravado.

 

Não é o que você está fazendo. Dá uma olhada de novo.

 

 p = fopen("dados.001","rt");
if (p == NULL)

{
	  printf("\n arquivo não existe e deve ser criado...\n");
	  goto FIM;
}
printf(" \t\t	C O N S U L T A   P O R  N O M E \n\n");
printf("Digite o nome que deseja consultar:  ");
scanf("%s", nome);

while (!feof(p))
{
	  if (nome==nome){

	  scanf("%s %f %f", nome, &n1, &n2);
	  printf(" \n\nNOME: %s\t",  nome);
	  media = (n1 + n2) / 2;

 

você lê ambos os nomes da entrada padrão e ainda armazena na mesma variável. Vai comparar muita coisa diferente desse jeito...

P/ ler do arquivo use fscanf, fgets...Tem um pdf enorme sobre arquivos nesse fórum.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok! mudei.

seria isso então?

 

int consultarnome() {
 
	FILE *p;
	float n1, n2, media;
	char nome[20] , name[20];
	int reg=0;
	
	p = fopen("dados.001","rt");
	if (p == NULL)
	   
	{
		  printf("\n arquivo não existe e deve ser criado...\n");
		  goto FIM;
	}
	printf(" \t\t	C O N S U L T A   P O R	N O M E\n\n");
	
	printf("Digite um nome");
	scanf("%s", name);
	
	 
	while (!feof(p))
	{
		  fscanf(p,"%s %f %f", nome, &n1, &n2);
		  if (nome==name){
		  
		  media = (n1 + n2) / 2;
		  
		  if (media>=7.0)
			 printf("%.2f\t aprovado", media);
		  else
			  if (media< 3.0)
				 printf("%.2f\t reprovado", media);
			  else
				  printf("%.2f\t exame", media);
				  printf("\n");
	}break;
	fclose(p);
FIM:
printf("\n\n \tDigite qualquer tecla para voltar ao menu...");
system("pause>null");

return(0);
}}

se for o caso...posto o codigo inteiro para elucidar melhor.

 

obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não compilei o seu código. Tou na escola.

Mas ja parece que está melhor...

 

de uma mudada:

pq você colocou aquele "break" fora das chaves??

nunca vi nada assim.

while (!feof(p))
{
	  fscanf(p,"%s %f %f", nome, &n1, &n2);

	if (nome==name)
	{
		  
			  media = (n1 + n2) / 2;
		   
			  if (media>=7.0)
				 printf("%.2f\t aprovado", media);
			  else if (media< 3.0)
				 printf("%.2f\t reprovado", media);
			  else
				 printf("%.2f\t exame", media);
				  printf("\n");

		 break;
   }
}

return 0;

Agora, pelo amor....

tira-me esse goto do seu código, junto com esse system("pause"). :P :P ;P

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

desta forma que você postou, fciou do mesmo jeito que antes...não está retornando o nome nem a media

 

mas valew pela ajuda

 

estou tentando aqui

 

qualquer novidade eu posto o codigo

Compartilhar este post


Link para o post
Compartilhar em outros sites

lol...

é claro...

 

não adianta você comparar os ponteiros, eles de CERTEZA serão diferentes:

if (name == nome) //sempre retornará falso

faça:

if (strcmp(name, nome) == 0)

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.