Ir ao conteúdo

C porque esse simples código dá bug?


Ir à solução Resolvido por Marcos Caique,

Posts recomendados

Postado

 Fui fazer esse código para um trabalho e ele me retorna valores indesejados, achei estranho pois apliquei exatamente o que aprendi e mesmo assim ainda fui atrás de um vídeo explicando, o método usado foi o mesmo e deu certo lá, consegui fazer de outra maneira mas estou curioso pra saber porque não está dando certo-- códigos abaixo.

Código bugado

#include <stdio.h>
int main()
{
	
	float conta, contaF;
	
	printf("Coloque a conta:");
	scanf("%f", &conta);
	
	contaF = conta + (conta * 0,10);
	
	printf("Valor com gorjeta é de: %f", contaF);
	
	return 0;
}

Codigo Funcional

#include <stdio.h>
int main()
{
	
	float conta, contaF;
	
	printf("Cliente, digite o valor da conta: R$");
	scanf("%f", &conta);
	
	contaF = conta + (conta * ((float)10/(float)100));
	
	printf("O total deu: R$%.2f", contaF);
	
	return 0;
	
	
}

Eu não aprendi a necessidade do Float antes dos números, realmente precisa?

  • Obrigado 1
  • Solução
Postado

@LucasrodriguesP Provavelmente você está obtendo valores indesejados devido a um erro de digitação quando você atribui valor a variável contaF. 

1 hora atrás, LucasrodriguesP disse:
contaF = conta + (conta * 0,10);

Quando utilizamos numeros decimais no código sempre devemos utilizar o ponto ao em vez da virgula, pois o compilador não irá reconhecer que se trata de um número decimal caso utilize a virgula. Nesse caso utilize 0.10 ao em vez do 0,10

 

1 hora atrás, LucasrodriguesP disse:
contaF = conta + (conta * ((float)10/(float)100));

Nesse caso foi utilizado o float antes dos números somente para especificar que ele deseja obter um valor em decimal do resultado da divisão, pois na linguagem C quando realizamos operações com números inteiros, o resultado obtido também será inteiro, mesmo no caso em que o resultado da operação seja armazenada em uma variável do tipo float. Nesse caso, tanto o 10 e o 100 são inteiros e ao dividir ao em vez do resultado obtido ser o 0.1 ele será aproximado para 0, pois o resultado seria inteiro caso não fosse especificado o float. Aconselho dar uma lida no tópico 2 desse site Conversão de tipo em C (inteiro e "real") para entender um pouco melhor caso não tenha ficado tão claro.

  • Curtir 2

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!