Ir ao conteúdo

Posts recomendados

Postado
/*Uma empresa vende o mesmo produto para quatro diferentes estados. Cada estado
possui uma taxa diferente de imposto sobre o produto (MG 7%; SP 12%; RJ 15%; MS
8%). Fac¸a um programa em que o usu´ ario entre com o valor e o estado destino do
produto e o programa retorne o prec¸o final do produto acrescido do imposto do estado
em que ele ser´a vendido. Se o estado digitado n˜ao for v´ alido, mostrar uma mensagem
de erro.*/
main()
{
    int valor,opc;
    printf("Digite o valor do produto: ");
    scanf("%d",&valor);
    printf("Escolha o estado.\n");
    printf("Escolha - Estado = Imposto\n");
    printf("   1   -   MG    =  7%%\n   2   -   MS    =  8%%\n");
    printf("   3   -   SP    =  12%%\n   4   -   RJ    =  15%%\n");
    printf("Escolha: ");
    scanf(" %d",&opc);

    switch(opc)
    {
        case 1:
        {
            printf("Estado escolhido: Minas Gerais - Taxa de imposto 7%%.\n");
            printf("O preço final do produto com o imposto é R$%d\n",valor+(valor*0,07));
            break;
        }
        case 2:
        {
            printf("Estado escolhido: Mato Grosso do Sul - Taxa de imposto 8%%.\n");
            printf("O preço final do produto com o imposto é R$%d\n",valor+(valor*0,08));
            break;
        }
        case 3:
        {
            printf("Estado escolhido: São Paulo - Taxa de imposto 12%%.\n");
            printf("O preço final do produto com o imposto é R$%d\n",valor+(valor*0,12));
            break;
        }
        case 4:
        {
            printf("Estado escolhido: Rio de Janeiro - Taxa de imposto 15%%.\n");
            printf("O preço final do produto com o imposto é R$%d\n",valor+(valor*0,15));
            break;
        }
        default:
        {
            printf("O estado não foi escolhido corretamente.\n");
            break;
        }
    }
}

Já resolvi o problema troquei os valores por " valor+(valor*(8/100)) "

Mas fiquei sem saber porque acontece esse erro, nunca tinha ocorrido cmg.

Pesquisei e achei esse caso de outra pessoa: https://stackoverflow.com/questions/8459030/whats-wrong-with-array-declaration-invalid-digit-in-octal-constant

Pelo o que eu entendi o certo é colocar um espaço Ex.: " 8" ao invés de "08"

Mas ainda não entendi o porquê. Se alguém poder me ajudar a entender agradeço.

Postado
  Em 25/02/2021 às 18:57, Malcolm X disse:

Ex.: " 8" ao invés de "08"

Mas ainda não entendi o porquê

Expandir  

 

A resposta está bem no titulo do tópico: um valor que começa por ZERO é uma constante em OCTAL em C.

 

A linguagem C foi escrita originariamente em um computador da marca Digital, um PDP-11. E essas máquinas usavam octal e não hexadecimal como padrão. Talvez só pra serem diferentes das máquinas da IBM que usavam hexadecimal e EBCDIC as da Digital usavam octal e ASCII :) 

 

E como o maior dígito em octal é sete e você escreveu 8 melhor para você, porque por exemplo 033 é o ESC em octal, mas vale 27 em decimal e não ia dar erro e você ia passar uma época tentando achar o erro...

 

Veja a saída

 


 27 27 27


Desse programa

 

#include <stdio.h>
int main(void)
{
    printf("\n %d %d %d\n", 033, 27, 0x1B );
    return 0;
}

 

Você até que deu sorte. Melhor que dê erro do que um resultado estranho...

 

    float v = 2.; 
	float x = (v + 033) / 045;

:D 

  • Curtir 1
  • Obrigado 1
Postado

O indicador de decimal em C é o ponto e não a virgula, talvez por isso tenha dado erro 0,08. Use 0.08 e nos demais também (0.12, 0.15, etc.).

Além disso, a variável "valor" tem que ser do tipo float, se quiser realizar operações com decimais.

  • Curtir 1
Postado
  Em 25/02/2021 às 20:32, Flávio Pedroza disse:

0,08. Use 0.08 e nos demais também (0.12, 0.15, etc.).

Expandir  

 

Cuidado!

 

Tudo isso que começa com zero é octal. Podem não ser os valores que imagina. O ponto decimal vai depender da configuração de locale, mas o zero inicial vai fazer o compilador tentar ler uma constante octal e vai dar erro antes de avaliar o resto, como de fato deu

 

  • Curtir 1

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

Mostrar 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

Mostrar mais  
×
×
  • Criar novo...