Ir ao conteúdo
  • Cadastre-se

Erro com o char de novo?


Ir à solução Resolvido por dontpanic,

Posts recomendados

Bom, não sei o que está acontecendo de errado, mas quando copilo e executo (print abaixo do Código) eu digito quando pede para dizer o estado: mg... sp... rj... ou ms, mas ele não aparece nenhuma as frases nas quais estão nos ifs...

 

Code:

#include <iostream>#include <stdio.h>#include <locale.h>#include <string.h>int main(int argc, char** argv) {	setlocale(LC_ALL, "Portuguese");		float valor, valorp, precomg, precosp, precorj, precoms;	char estado;		printf ("Digite o valor do produto: R$ ");	scanf (" %f", &valor);	printf ("\nDigite o estado de destino do produto (mg, sp, rj ou ms): ");	scanf (" %c", &estado);		precomg = valorp*(7/100);	precosp = valorp*(12/100);	precorj = valorp*(15/100);	precoms = valorp*(8/100);		if (estado == 'mg')	{		printf ("\n\nO preço final com imposto em Minas Gerais será de: R$ %0.2f. \n", precomg);	}		if (estado == 'sp')	{		printf ("\n\nO preço final com imposto em São Paulo será de: R$ %0.2f. \n", precosp);	}		if (estado == 'rj')	{	        printf ("\n\nO preço final com imposto no Rio de Janeiro será de: R$ %0.2f. \n", precorj);	}		if (estado == 'ms')	{	        printf ("\n\nO preço final com imposto em Mato Grosso do Sul será de: R$ %0.2f. \n", precoms);	}		return 0;}

Imagem Compilador Dev-C++ 5.8.3: http://prntscr.com/5bp8p2

 

Está, também, aparecendo este erro em todas as linhas dos comandos ifs:

"[Warning] multi-character character constant [-Wmultichar]"

 

OBS: para quem quiser ler a questão se caso estiver com dúvida, está aqui:

 

Uma empresa vende o mesmo produto para quatro diferentes estados. Cada estado possui uma taxa diferente de imposto sobre o produto. Faça um algoritmo que leia o valor e o estado de destino de um produto e imprima, o preço final com imposto, o valor do imposto, e se o estado digitado não for válido imprima a mensagem de “Estado Inválido!”.

Dados: MG: 7%; SP: 12%; RJ: 15%; MS: 8%.

 

 

Estou ainda na metade da questão, ainda não fiz tudo (óbvio).

 

Desde já, agradeço!

  • Curtir 1
Link para o post
Compartilhar em outros sites

"char" representa apenas 1 caractere. Uma letra ('a', 'b', 'c', etc) ou símbolo ('\', '.', ',', etc).

Mas no teu código você tá usando a variável "estado" pra receber mais de uma letra, e tá também comparando ela com mais de uma letra nos ifs.

Pra resolver isso, ou você muda o menu de modo a usar apenas uma letra:

printf ("\nDigite o estado de destino do produto (a - mg, b - sp, c - rj ou d - ms): ");scanf (" %c", &estado);...if (estado == 'a')...if (estado == 'b')...
...ou então você declara a variável "estado" como sendo um vetor de caracteres (uma string):

 

#include <string.h>...char estado[3];...printf ("\nDigite o estado de destino do produto (mg, sp, rj ou ms): ");scanf (" %s", estado);...if (strcmp(estado, "mg") == 0)...
Note que no scanf você usa %s em vez de %c pra capturar strings, e que não precisa usar & na variável estado pois ela já retorna um endereço normalmente quando usada sem os colchetes.

Note também que na hora de usar a função strcmp() (que compara duas strings e retorna zero caso sejam iguais) você tá colocando a string a ser comparada entre aspas duplas.

Aspas simples são só usadas pra um caracter.

'a' // correto

"a" // correto também

'abc' // incorreto

"abc" // correto

Edit:

Ah, e você não precisa daquele #include <iostream> no começo... essa biblioteca é do C++. O teu código tá usando C.

E agradeço ter identado o código e ter usado as tags code.

  • Curtir 1
Link para o post
Compartilhar em outros sites

"char" representa apenas 1 caractere. Uma letra ('a', 'b', 'c', etc) ou símbolo ('\', '.', ',', etc).

Mas no teu código você tá usando a variável "estado" pra receber mais de uma letra, e tá também comparando ela com mais de uma letra nos ifs.

Pra resolver isso, ou você muda o menu de modo a usar apenas uma letra:

printf ("\nDigite o estado de destino do produto (a - mg, b - sp, c - rj ou d - ms): ");scanf (" %c", &estado);...if (estado == 'a')...if (estado == 'b')...
...ou então você declara a variável "estado" como sendo um vetor de caracteres (uma string):

 

#include <string.h>...char estado[3];...printf ("\nDigite o estado de destino do produto (mg, sp, rj ou ms): ");scanf (" %s", estado);...if (strcmp(estado, "mg") == 0)...
Note que no scanf você usa %s em vez de %c pra capturar strings, e que não precisa usar & na variável estado pois ela já retorna um endereço normalmente quando usada sem os colchetes.

Note também que na hora de usar a função strcmp() (que compara duas strings e retorna zero caso sejam iguais) você tá colocando a string a ser comparada entre aspas duplas.

Aspas simples são só usadas pra um caracter.

'a' // correto

"a" // correto também

'abc' // incorreto

"abc" // correto

Edit:

Ah, e você não precisa daquele #include <iostream> no começo... essa biblioteca é do C++. O teu código tá usando C.

E agradeço ter identado o código e ter usado as tags code.

 

 

  Obrigado dontpanic, procedi como você me orientou, decidi usar esta:

printf ("\nDigite o estado de destino do produto (a - mg, b - sp, c - rj ou d - ms): ");scanf (" %c", &estado);if ...

  Só que quando compilo, o resultado dá 0,0. As contas que antes eram, por exemplo, 

precomg = valorp*(7/100);

  agora eu coloquei deste jeito:

precomg = (valorp*(7/100))*100;

  ou seja, para primeiro ele verificar qual é o valor do produto que irei digitar, e então fazer o 7/100 e multiplicar pelo valor do produto, e após isso, multiplicar   por 100, que então, sairá o valor em porcentagem.

Link para o post
Compartilhar em outros sites
  • Solução

Tem uma coisa que eu não percebi, mas que eu vi agora quando compilei esse código:

Naquele primeiro scanf você tá pegando o preço do produto e armazenando em "valor", mas aí na hora de calcular o preço por estado você tá usando "valorp".

Basta tirar o "p" no final.

Além disso, você não precisa fazer essas contas todas aí... 7% é o mesmo que 0.07, 12% é o mesmo que 0.12.

precomg = valor * 0.07;

precosp = valor * 0.12;

precorj = valor * 0.15;

precoms = valor * 0.08;

E se quiser simplificar mais ainda, nem precisa dessas 4 variáveis... no próprio printf() você já pode passar esses valores aí.

printf ("\n\nO preço final com imposto em Minas Gerais será de: R$ %0.2f. \n", (valor * 0.07));

  • Curtir 1
Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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...

livros-black-friday.jpg

SEMANA BLACK FRIDAY
Clube do Hardware

Todos os livros por apenas R$ 9,99 cada!

Eletrônica | Montagem de Micros | Redes