Ir ao conteúdo
  • Cadastre-se

C error: invalid digit "8" in octal constant|


Malcolm X

Posts recomendados

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

Link para o comentário
Compartilhar em outros sites

1 hora atrás, Malcolm X disse:

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

Mas ainda não entendi o porquê

 

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
Link para o comentário
Compartilhar em outros sites

15 minutos atrás, Flávio Pedroza disse:

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

 

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
Link para o comentário
Compartilhar em outros sites

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