Ir para conteúdo
Fórum Script Brasil
  • 0

Erro em um programa (NÃO ENCONTRO O ERRO)


dark_max

Pergunta

Galera é o seguinte, alguém poderia me dizer onde está o erro desse programa. (NÃO CONSEGUI INSERIR NA CODEBOX - ERROR 404)

Obs1.: O programa está bem bagunçado. Estou começando em C e a inda não pequei as "manhas" em organização.

Obs2.: Estou compilando no Dev-C++ 4.9.9.2

Obs3.: O compilador me retorna a mensagem: invalid digit "8" in octal constant. Na parte destinada ao código do produto eu estou colocando coisas do tipo, 009, faço isso porque preciso que o código do produto tenha três dígitos.

Obs4.: Antes da função main(), dentro de /*definição das estruturas e/ou inicialização - inicio*/, há essa expressão paga.produtosCONT=0; , não sei o que está errada com ela (quando eu retiro a expressão, o erro indicado pelo compilador é o da Obs3.

Obs5.: O erro do "octal" provavelmente é porque estou usando valores do tipo 001, como mencionei acima. Como eu contorno essa situação, lembrando que o código do produto precisa ter 3 dígitos.

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#define QUANTIDADE 10
#define LIMITA 1000
#define NOME 100

/*protótipo da função inicia()*/
void iniciar(void);

/*protótipo da função pagamento()*/
void pagamento(void);

/*protótipo da função cupom()*/
void cupom(void);


/*declaração das estruturas*/
struct armazena 
{
       char nome[NOME];
       float prec;
       int cod;
       
};

struct pagamento
{
       float totalB;
       float totalL;
       float precPARCELA;
       float DescJur;
       int parcelas;
       int produtos[LIMITA];
       int produtosCONT;
       char ProdNome[NOME];
};

/*Explicação sobre algumas variáveis
produtosCONT = contador de produtos comprados

*/
/*declaração das estruturas - fim*/


/*definição das estruturas e/ou inicialização - inicio*/

struct armazena produto[] =  {
{"Red Bull",7.99,001},{"Bisc. Passa Tempo",2.29,002},{"Banana Prata Kg",1.52,003},{"Hamburguer Sadia Frango", 8.75,004},
{"Azeite Oliva Galo 500ml",16.10,005},{"Atum Coqueiro lata 120g",4.05,006},{"Macarrao Galo 500g",4.20,007},{"Pao Seven Boys 500g",3.49,008},
{"Catchup Arisco 390g",3.20,009},{ "Leite Batavo integral 1L",2.20,010},''
};

struct pagamento paga;
paga.produtosCONT=0;


/*definição das estruturas e/ou inicialização - fim*/      

float totalFinal=0;


/*Declaração de variáveis genéricas*/
      int verdade=1, n=QUANTIDADE, fim;
      char ch;

main()
{
      
      
      while (verdade)
      {
            
      printf("Selecione a opcao desejada: ");
      printf("\nTecle I para iniciar o caixa");
      printf("\n      F para finalizar");
      
    
    
    switch (ch)
    {
           case 'I':
           iniciar();
           pagamento();
           cupom();
           break;
           
           case 'F':
           printf("\nValor arrecadado no dia: %f\n",paga.totalL);
           verdade=0;
           break;
           
           default:
                   break;
           
         
    }
      
      
      
      
      
      
      
      }
 system("PAUSE");
 return 0;     
}



/*definição da função iniciar*/
void iniciar(void)
{
     /*cod=código, codS=código simples (inteiro), subT=subtotal temporário*/
     int quant,i,codS,j=0;
     float subT,subTT;
     char cod[4];
     
     /* teste string e teste simple, um recebe 000 e o outro termina o laço */
     int teste;
     int testeS;
     int t=0;
     
     
     while (teste)
     {
     printf("\nDigite o código do produto: ");
     gets(cod);
     codS=atoi(cod);
     
                     if(cod[0] == 0 && cod[1] == 0 && cod[2] == 0)
                     {
                               teste=0;
                               break;
                     }
                     else
                     {
                         for(i=0; i<n; i++)
                         {
                                         if(codS == produto[i].cod)
                                         {
                                                 paga.produtos[i]=produto[i].cod;
                                                 
                                                 
                                                 paga.produtosCONT++;
                                                 j=i;
                                                 i=n;
                                                 t++;
                                         
                                         }
                         }
      
      if(t == 0)
      {
           printf("Código inexistente. Por favor, digite um codigo correto");
           break;
      } 
                        
     }
   
                   
     printf("\nDigite a quantida do produto: ");
     scanf("%d", &quant);
     
     
     subTT=(quant*produto[j].prec);
     subT+=subTT;
     printf("\nO subtotal da compra = %0.2f",subT);
     
     }
     
     paga.totalB=subT;
     
     
     return;
     
}

/*definição da função pagamento()*/
void pagamento(void)
{
     
     int parc;
     int verdade2=1;
     
     
     
     printf("\nPAGAMENTO");
     
     printf("\nObservações:");
     printf("\nO número máximo de parcelas é 12.");
     printf("\nHá um desconto de 5%% sobre pagamentos avista.");
     
     printf("\n\nDigite os dados a seguir.");
     
     while (verdade2)
     {
           printf("\n\nQuantidade de parcelas (1 para pagamentos avista): ");
           scanf("%d", &parc);
     
           if(parc == 0)
             {
                   printf("O valor 0 (zero) não é válido como parcela. Digite outro valor.");
                   break;
             }
             else
             {
                 if(parc <= 12)
                 verdade2=0;
                 else
                 {
                     printf("\nValor inválido. Digite um número menor que 12 e maior que 0 (zero)");
                     break;
                 }
             }
     
     }
     
     
     if(parc == 1 )
     {
             paga.totalL=(paga.totalB*0.95);
             paga.DescJur=5;
     }
     else
         {
             paga.totalL=(paga.totalB*(parc*1.03));
             paga.DescJur=(parc*1.03);
         }
     
     paga.precPARCELA=(paga.totalL/parc);
     paga.parcelas=parc;

}

/*definição da função cupom()*/
void cupom(void)
{
     int i=0,j=0,c=0,d=0;
     
     system("CLS");
     printf("\nCupom Fiscal");
     
     printf("\nProdutos comprados:");
     
     j=paga.produtosCONT;
     
     for (i=0; i<j; i++)
     {
         for(c=0; c<n; c++)
         {
                  if(paga.produtos[i] == produto[c].cod)
                  printf("\n%d\t%s\t%f",paga.produtos[i],produto[c].nome,produto[c].prec);
                  
         }
     }
     
     printf("\nPreço total da compra: %f", paga.totalL);
     if(paga.parcelas != 1)
     {
                      printf("\nPreço das parecelas : %f",paga.precPARCELA);
                      printf("\nJuros: %f",paga.DescJur);
     }
     else
     if(paga.parcelas == 1)
     {
                       printf("\nPagamento realizado a vista, parecela única");
                       printf("\nDesconto 5%");
     }    
     
     
     totalFinal = (float)(totalFinal+paga.totalL);
     
     
}

Editado por kuroi
Adicionar tag CODE
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0
(NÃO CONSEGUI INSERIR NA CODEBOX - ERROR 404)

realmente não esta funcionando. você pode escrever na mao [.codebox]seu codigo aqui[/.codebox] (sem o ponto na frente), ou usar a tag CODE, pelo menos essa funciona com o botaozinho la em cima e q eu acho muito melhor do q o codebox.

Obs3.: O compilador me retorna a mensagem: invalid digit "8" in octal constant. Na parte destinada ao código do produto eu estou colocando coisas do tipo, 009, faço isso porque preciso que o código do produto tenha três dígitos.

Obs5.: O erro do "octal" provavelmente é porque estou usando valores do tipo 001, como mencionei acima. Como eu contorno essa situação, lembrando que o código do produto precisa ter 3 dígitos.

numeros são valores, não tem digitos. dentro da variavel é gravado o valor numerico em binario, sem nenhum formato.

se você quer guardar o valor "009" por exemplo, então declare como char[4] (os tres primeiros indices guardam os tres digitos e o ultimo guarda o caracter 0).

agora se você precisar fazer calculos com esses numeros, vai ter então q guardar como int mesmo, só os valores, 1, 2, 3, etc. e na hora q você for mostrar na tela você vai ter q usar uma funcao q converta e ponha o formato.

Obs4.: Antes da função main(), dentro de /*definição das estruturas e/ou inicialização - inicio*/, há essa expressão paga.produtosCONT=0; , não sei o que está errada com ela (quando eu retiro a expressão, o erro indicado pelo compilador é o da Obs3.

mas na verdade os erros devem estar acontecendo exatamente porque você pos esses codigos antes de abrir a funcao main().

antes da funcao main(), você só pode colocar declaracoes. atribuicao de valores são instrucoes a serem executadas, devem estar dentro de uma funcao necessariamente (a não ser em declaracoes de constantes, q obrigatoriamente devem ter algum valor atribuido no momento da declaracao).

sendo assim toda essa parte do /*definição das estruturas e/ou inicialização - inicio*/ deveria estar dentro do main().

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...