Ir para conteúdo

POWERED BY:

Arquivado

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

jotaelle

Problema com loop while

Recommended Posts

Acredito ter feito exatamente isto no meu codigo, mas não está fazendo o que precisa fazer, se puder dar um help agradeço:

Caso o susuario digite sim, entraria no segundo while e pesquisaria um novo numero.

estou usando o DEVC++

 

Segue o codigo:

#include <stdio.h>
#include <stdlib.h>
#include <conio2.h>
int main()
{
 int i, x; 
 int ini=1, fim=100;
 int suce=0, nsuce= 0, teste = 0, meio, flag=0;
 int contp=0;
 int vet[100];
 char cont='s';
 printf("\n------------------------------------------------------------------");
 printf("\nIMPRIMINDO O VETOR\n\n");
 for(i=1;i<=100;i++)
 {
	  vet[i] = i;
	  vet[i] = vet[i] + i/2;
	  printf("%d ", vet[i]);
 }
 
 while(cont == 's')
 {
	  flag = 0;
	  printf("\n\nDigite um valor para ser pesquisado no vetor: \n");
	  scanf("%d ",&x);
	  while(ini <= fim && flag==0)
	  {
				  meio = (ini + fim) / 2;
				  if(vet[meio] == x)
				  {
					  contp = contp + 1;
					  printf("\nNumero encontrado %d \n", vet[meio]);
					  suce = suce + 1;
					  teste = teste + 1;
					  flag = 1;
				  }
				  else if(vet[meio] < x)
				  {
					  ini = meio + 1;
					  teste = teste + 1;
					  nsuce = nsuce + 1;
				  }
					  else
					  {
						  fim = meio - 1;
						  teste = teste + 1;
						  nsuce = nsuce + 1;
					  }
	  }
	  // " * " (supressão), na string de formatação, 
	  //diz para o scanf ler tudo e descartar qualquer coisa.

	  printf("Deseja fazer outra pesquisa ? (s/n): ");
	  scanf("%%c%*c", &cont);
	  printf("conf = %c*c", cont);

 }
 printf("\nPesquisas  ", contp);
 printf("\nNumero encontrado %d ", vet[meio]);
 printf("\nNumero de teste%d \n ", teste);
 return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, você só quer ignorar um char:

scanf("%c%*c", &cont);

printf("conf = %c", cont);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, encontrei o teu problema, tinha me passado um scanf...

 

na linha 26:

scanf("%d%*c",&x);
é o correto!

 

pq era o '\n' desse scanf que ficava no buffer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

for(i=1;i<=100;i++)
{
  vet[i] = i;
  vet[i] = vet[i] + i/2;
  printf("%d ", vet[i]);
}

 

Arrays começam do zero.

 

 

scanf("%d ",&x);

 

Retire o espaço.

 

 

------------------------------------------------------------------

IMPRIMINDO O VETOR

 

1 3 4 6 7 9 10 12 13 15 16 18 19 21 22 24 25 27 28 30 31 33 34 36 37 39 40 42 43 45 46 48 49 51 52 54 55 57 58 60 61 63 64 66 67 69 70 72 73 75 76 78 79 81 82 84 85 87 88 90 91 93 94 96 97 99 100 102 103 105 106 108 109 111 112 114 115 117 118 120 121 123 124 126 127 129 130 132 133 135 136 138 139 141 142 144 145 147 148 150

 

Digite um valor para ser pesquisado no vetor:

1

 

Numero encontrado 1

Deseja fazer outra pesquisa ? (s/n): s

 

Pesquisas

Numero encontrado 1

Numero de teste6

 

 

 

Arrume teu código, porque ele encontra número que não existe.

 

 

------------------------------------------------------------------

IMPRIMINDO O VETOR

 

1 3 4 6 7 9 10 12 13 15 16 18 19 21 22 24 25 27 28 30 31 33 34 36 37 39 40 42 43 45 46 48 49 51 52 54 55 57 58 60 61 63 64 66 67 69 70 72 73 75 76 78 79 81 82 84 85 87 88 90 91 93 94 96 97 99 100 102 103 105 106 108 109 111 112 114 115 117 118 120 121 123 124 126 127 129 130 132 133 135 136 138 139 141 142 144 145 147 148 150

 

Digite um valor para ser pesquisado no vetor:

50

Deseja fazer outra pesquisa ? (s/n): s

 

Pesquisas

Numero encontrado 49

Numero de teste7

 

 

------------------------------------------------------------------

IMPRIMINDO O VETOR

 

1 3 4 6 7 9 10 12 13 15 16 18 19 21 22 24 25 27 28 30 31 33 34 36 37 39 40 42 43 45 46 48 49 51 52 54 55 57 58 60 61 63 64 66 67 69 70 72 73 75 76 78 79 81 82 84 85 87 88 90 91 93 94 96 97 99 100 102 103 105 106 108 109 111 112 114 115 117 118 120 121 123 124 126 127 129 130 132 133 135 136 138 139 141 142 144 145 147 148 150

 

Digite um valor para ser pesquisado no vetor:

300

 

Numero encontrado 300

Deseja fazer outra pesquisa ? (s/n): s

 

Pesquisas

Numero encontrado 300

Numero de teste7

 

 

Presta atenção no código e vê se você tá reinicializando as variáveis antes de refazer a busca binária.

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.