Ir ao conteúdo

Erro com o char de novo?


bc2010

Posts recomendados

Postado

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!

Postado

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

Postado

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

Postado

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));

Arquivado

Este tópico foi arquivado e está fechado para 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...

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

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!