Ir ao conteúdo
  • Cadastre-se

Problema no codigo


Posts recomendados

estou com o seguinte problema: quando o usuário aperta em introdução a computação -> conversão de base -> binário, o código funciona perfeitamente retornando a conversão, o único problema é que quando a conversão acaba e o usuário aperta para voltar ao menu anterior e tenta fazer a conversão de binário novamente o resultado da conversão fica errado, me ajudem !!!

obs: a conversao de hexadecimal tem o mesmo problema

teste.cpp

Link para o comentário
Compartilhar em outros sites

@Juniorsnts018 Olha Cara acho que seria interessante você separa o seu código em modulos e fazer chamadas a ele dai você nao precisa de tanto codigo que faz a mesma coisa. e você deixa de usar o goto que e fria...

se tiver um pouco mais de conhecimento usar OO dividindo em Classes e Métodos;

Agora Fazer um Codigo desse Tamanho estruturado todo no Main nao e uma boa pratica.

 

Corrigido seu erro Mais tenta Fazer e Aprender o que te disse.

seu codigo ficaria uns 90% menor e mais eficiente.

No caso Seu Codigo você teria que INICIALIZAR a Variavel d = 1 toda vez que entrar no codigo;

E o mesmo com a Variavel dec = 0;
 

teste.cpp

 


ABRAÇO;

Link para o comentário
Compartilhar em outros sites

Olha em modulo ficaria assim 

#include <stdio.h>

void conversorBase();
void conversorGradeza();

int main()
{
	
	int opcao;
	do
	{
		system("cls");
		printf("\n\t1 - Conversor de Base Binaria/Decimal/Hexadecimal");
		printf("\n\t2 - Conversor de Grandeza Byte/KByte/MByte/GByte/TByte");
		printf("\n\t3 - Sair");
		printf("\n\t==>");
		scanf("%i",&opcao);
		
		switch(opcao)
		{
			case 1: conversorBase();
			getch();
				break;
				
				case 2:
				break;
				
				case 3:
					break;
		}
	}while(opcao != 3);
	
	
	return 0;
}
void conversorBase()
{
	int base,d = 1,h,i=0,vetBin[50];
    int bin,dec = 0,j;
	char hex[8],Bin[50];
	do
	{
		system("cls");
		printf("\n\t1 - Binario");
		printf("\n\t2 - Decimal");
		printf("\n\t3 - HexaDecimal");
		printf("\n\t4 - Sair");
		printf("\n\t==>");
		scanf("%i",&base);
		
		switch(base)
		{
			case 1:
				printf("\nDigite Um numero na Base Binaria: ");
				scanf("%i",&bin);
					do
					{
						dec = dec+(bin%10)*d;
						d = d*2;
						bin = bin/10;
					}while(bin != 0);
					
					printf("\nO numero em decimal e: %d\n", dec);
					itoa(dec,hex,16);
					
					printf("O numero em hexadecimal e: %s\n\n", hex);
					getch();
				break;
				
				case 2:  printf("\nDigite Um numero na Base Decimal: ");
				scanf("%i",&dec);
				
				itoa(dec,Bin,2);
				printf("\nO Numero %i em Binario e: %s\n\n",dec, Bin);
				
				itoa(dec,hex,16);					
				printf("O Numero %i em hexadecimal e: %s\n\n",dec, hex);
				
				getch();
					
					case 3: 
					i = 0;
			
					printf("\nCONVERSAO DE HEXADECIMAL");
					 printf("\nDigite Um Valor na Base HexaDecimal: ");
					scanf("%x",&h);
					
					
				
					printf("\n%x em decimal e: %d\n", h, h);

					printf("\n%x Em binario e: ", h);
						
					while(h>0)
					{
						vetBin[i]= h%2;
						i++;
						h=h/2;
						
					}
					
					for(j=i-1; j>=0; j--)
					{
						printf("%d", vetBin[j]);
					}
					getch();
					break;
					
					
					case 4:
						break;						
		}
		
	 } while(base != 4);
	
}

Dava pra ficar muito mais funcional e menor o codigo usando recursividade e outras tecnicas.

mais tenta entender e ganhar conhecimento abraço.

Link para o comentário
Compartilhar em outros sites

@Xandrules realmente fica bem menor, tenho uma duvida, como faço pro meu codigo reconhecer apenas numero em certa parte, e apenas letras em outra parte?

@Xandrules depois que fiz o codigo que fiquei sabendo do void, nao sei muito bem como se usa ele, mas pretendo fazer meu proximo usando ele

Link para o comentário
Compartilhar em outros sites

olha o void e quando você nao precisa de nenhum retorno...

ex:

void calcularSoma(int Num1,int Num2)

nesse caso eu recebo por parametro dois inteiros mais nao retorno o resultado 

ja em:

int calcularSoma(int Num1,int Num2)

você retorna o resultado da soma. basicamente e isso.

 

para reconhecer apenas numeros depende do tipo primitivo que você usa 

ex: float,int e tipos primitivos para numeros reais e inteiros negativos e positivos.

ja letras se usa Char para caracteres e char [] para literais.

 

Link para o comentário
Compartilhar em outros sites

@Juniorsnts018 tem varias formas de se fazer isso mais como você esta comecando acho que o mais ideal seria você ler e depois compara caracter por caracter e ve se a solicitacao esta de acordo ou mandar repetir se for o caso.


O mais aconselhado seria o uso de Threads no Codigo mais e um pouco complexo so para uma aplicaçao simples igual você quer.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!