Error in income tax program in C

Asked

Viewed 376 times

0

I developed the following program in C for an income tax calculation of employees of a company

#include <stdio.h>

int main(){
    //Declaração de variaveis
    int depen,cont,a1=0,a2=0,a3=0,a4=0,a5=0;
    double salario,inss,base,dedudepen,aliq,imposto;
    double totalsalario,totaldepen,totalimposto;
    double mediasalario,mediadepen,mediaimposto;
    //Enquanto o valor do salário for diferente de negativo ou nulo, executa o programa
    while(salario>0){
    //Dados de Salário e número de dependentes
    printf("Digite o salario:\n");
    scanf("%lf",&salario);
    if(salario>0){
    printf("Digite o numero de dependentes:\n");
    scanf("%d",&depen);
    //Calculo do INSS

    if(salario<=1751.81){
        inss=salario*0.08;
    }
    else if (salario<=2919.72){
inss=salario*0.09;
    }
    else if (salario<=5839.45){
inss=salario*0.11;
    }
    else {
inss=642.34;        
    }

    printf("INSS:%.2lf\n",inss);
    //Calculo da dedução por dependentes
    dedudepen=depen*189.59;
    printf("DEDUCAO DE DEPENDENTES:%.2lf\n",dedudepen);
    //Calculo da base
    base=salario-inss-dedudepen;
        printf("BASE:%.2lf\n",base);
    //Calculo do Imposto de renda
    if(base<=1903.98){

        a1++; //conta quantos funcionarios estão presentes nessa faixa de IR
        aliq=base*0.00;
        imposto= aliq-0;
            printf("IR:%.2lf\n",imposto);
    }
    else if(base<=2826.65){
        a2++;
            aliq=base*0.075;
        imposto= aliq-142.80;
            printf("IR:%.2lf\n",imposto);
    }
    else if(base<=3751.05){
        a3++;
            aliq=base*0.15;
        imposto= aliq-354.80;
            printf("IR:%.2lf\n",imposto);
    }
    else if(base<=4664.68){
        a4++;
            aliq=base*0.225;
        imposto= aliq-636.13;
            printf("IR:%.2lf\n",imposto);
    }
    else {
        a5++;
            aliq=base*0.275;
        imposto= aliq-869.36;
            printf("IR:%.2lf\n",imposto);
    }
    //Armazena todos os valores para o calculo da media
    totalsalario=totalsalario+salario;
    totaldepen=totaldepen+depen;
    totalimposto=totalimposto+imposto;
    cont=cont+1;

}
else{
}
}
//Calculo da média e exibição
if(cont=!0){

    mediasalario=totalsalario/cont;
    mediadepen=totaldepen/cont;
    mediaimposto=totalimposto/cont;
}
        printf("MEDIA SALARIOS:%.2lf\n",mediasalario);  
        printf("MEDIA DEPENDENTES:%.2lf\n",mediadepen); 
        printf("MEDIA IR:%.2lf\n\n",mediaimposto);
            printf("FUNCIONARIOS POR FAIXA DE IR:\n");
            printf("Ate R$ 1.903,98: %d\n",a1);
            printf("De R$ 1.903,99 a R$ 2.826,65: %d\n",a2);
            printf("De R$ 2.826,66 a R$ 3.751,05: %d\n",a3);
            printf("De R$ 3.751,06 a R$ 4.664,68: %d\n",a4);
            printf("Acima de R$ 4.664,68: %d\n",a5);

return 0;   
}

works normally until the part of the employee count per IR range, if used with only two counters the values normally come out

//Calculo do Imposto de renda
    if(base<=1903.98){
        a1++; //conta quantos funcionarios estão presentes nessa faixa de IR
        aliq=base*0.00;
        imposto= aliq-0;
            printf("IR:%.2lf\n",imposto);
    }
    else if(base<=2826.65){
        a2++;
            aliq=base*0.075;
        imposto= aliq-142.80;
            printf("IR:%.2lf\n",imposto);
    }
    else if(base<=3751.05){
    //  a3++; a partir do 3 estão como comentarios por conta do erro
            aliq=base*0.15;
        imposto= aliq-354.80;
            printf("IR:%.2lf\n",imposto);
    }
    else if(base<=4664.68){
    //  a4++;
            aliq=base*0.225;
        imposto= aliq-636.13;
            printf("IR:%.2lf\n",imposto);
    }
    else {
    //  a5++;
            aliq=base*0.275;
        imposto= aliq-869.36;
            printf("IR:%.2lf\n",imposto);
    }

but if used with the 5 counters it does not allow to insert values in the scanf and always displays blank values, someone has some idea of what could be the error or solution?

  • You did not initialize your cont variable. Make a correct indentation.

1 answer

1

Edit: as quoted in the comments you should also initialize the variable cont for the correct average calculation.

And you’re doing the verification on my point of view unnecessary that way:

if(cont=!0){ ... }

Where the right would be to remove this if (in my opinion) or do so:

if( cont != 0 ){ ... } 

After these amendments taken as input:

$ ./ir 
Digite o salario: 1000
Digite o numero de dependentes: 0
INSS:80.00
DEDUCAO DE DEPENDENTES:0.00
BASE:920.00
IR:0.00

Digite o salario: 2800
Digite o numero de dependentes: 0
INSS:252.00
DEDUCAO DE DEPENDENTES:0.00
BASE:2548.00
IR:48.30

Digite o salario: 3700
Digite o numero de dependentes: 0
INSS:407.00
DEDUCAO DE DEPENDENTES:0.00
BASE:3293.00
IR:139.15

Digite o salario:4600
Digite o numero de dependentes: 0
INSS:506.00
DEDUCAO DE DEPENDENTES:0.00
BASE:4094.00
IR:285.02

Digite o salario: 8000
Digite o numero de dependentes: 0
INSS:642.34
DEDUCAO DE DEPENDENTES:0.00
BASE:7357.66
IR:1154.00

Digite o salario: 0

Numero de Funcionarios: 5
MEDIA SALARIOS:4020.00
MEDIA DEPENDENTES:0.00
MEDIA IR:325.29

I got this exit:

FUNCIONARIOS POR FAIXA DE IR:
Ate R$ 1.903,98: 1
De R$ 1.903,99 a R$ 2.826,65: 1
De R$ 2.826,66 a R$ 3.751,05: 1
De R$ 3.751,06 a R$ 4.664,68: 1
Acima de R$ 4.664,68: 1

Browser other questions tagged

You are not signed in. Login or sign up in order to post.