Jump to content

Problemas na checagem do IF/ELSE

 Read 1 minute

Recommended Posts

 Read 1 minute

Gostaria da ajuda de vocês para identificar o problema nas minhas condicionais e nos calculos dentro delas. Não importa a combinação(&& ou || ) que eu faça sempre cai no primeiro IF e nao passa disso. A intenção é calcular o IR devido. Obrigado

 

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
void separadorDeSecao();


int main()
{
    //Permite o uso de acentuação conforme o idioma do sistema
    setlocale(LC_ALL,"Portuguese");
    
    //Declaração de Variaveis.
    
    char nome_funcionario[50];  //Armazena um vetor de char de 50 posições
    float salario;  //Armazena valor do salario
    
    //Entrada de Dados solicitados ao usuário
    
    printf("Entrar com o nome do Funcionario: ");
    gets(nome_funcionario);
    
    printf("Entrar com o valor do salario:  ");
    scanf("%f", &salario);
    
    separadorDeSecao();
    
    printf("Funcionario: %s\n", nome_funcionario );
    printf("Salário: %.2fR$\n", salario);
    
    //Calculo do IR
    if(salario > 0 || salario <=1637,11 )
    {
        printf("Insento de IR.");
    }
    else if(salario >= 1637,12 || salario <= 2453,50)
    {
        salario = (salario * (7,5/100));
        printf("O valor do Imposto devido é de %f", salario);
        
    }else if(salario >= 2453,51 || salario <= 3271,38)
    {
        salario = (salario * (15,0/100));
        printf("O valor do Imposto devido é de %f", salario);
        
    }else if(salario >= 3271,39 || salario <= 4087,65)
    {
        salario = (salario * (22,5/100));
        printf("O valor do Imposto devido é de %f", salario);
        
    }else if(salario > 4087,65)
    {
        salario = (salario * (27,5/100));
        printf("O valor do Imposto devido é de %f", salario);
        
    }
    
    
    
    
    
    system("pause");
    return 0;
}

void separadorDeSecao()
{
    printf("================================================\n");
    
}

Link to post
Share on other sites
Posted (edited)
 Read less than a minute
23 minutos atrás, fredericopissarra disse:

Você sequer tentou compilar esse troço, tentou?

Cara o quanto deve ser amarga e triste a sua vida ao ponto de ao invés tentar ajudar você se da ao trabalho de vim bostejar e vomitar arrogância em cima do post alheio.

Já é a segunda vez que eu venho e peço ajuda e você por algum motivo tenta menosprezar tudo que eu fiz. Se você não é capaz de  ajudar alguém que esta iniciando e tendo dificuldade passa direto. Mas se isso faz essa tua vida vazia ter algum sentindo ok, eu até entendo, mas deveria se tratar. E tenho certeza que você um dia quando começou teve dificuldade mesmo que nas coisas simples. Agora por favor quando se deparar com algum pedido meu se não foi pedir muito ignore caso não queira ajudar. Se for pra tentar me menosprezar e destilar seu amargor passe longe, por favor. Passa bem.

Edited by Adauto
Link to post
Share on other sites
 Read less than a minute

Conviver num ambiente, mesmo que online, onde pessoas que não conhecem você - e talvez nem queiram conhecer - não é simples. Exige uma certa resiliência para não se ofender. Peço que ambos relevem, caso tenham se ofendido, e vamos nos ater ao problema. ?

@Adauto, não cheguei a compilar, mas se você colou o código exatamente como está, precisa substituir essas vírgulas nos seus valores decimais por ponto.

Se quiser deixar esse código mais pro, pode trocar a gets() pela gets_s() - mas se atenta para o fato de que esta requer 2 argumentos. ?

Usar system("pause") deixa teu código preso ao Windows. Eu removeria isso, ou pelo menos deixaria dentro de um #ifdef pra testar se é Windows, mas enfim, é um capricho. Outros usuários podem dar outras sugestões do que fazer com isso. kkkk

Abraços!

Link to post
Share on other sites
 Read less than a minute

Fernando,

Só para constar: gets() e gets_s() não constam da biblioteca padrão. E existe um outro problema mais sutil do que as vírgulas.

Mas, como fui tão carinhosamente pedido para ignorar e "passar longe", curtindo minha vida amarga e triste, deixo para descobrirem...

Link to post
Share on other sites
 Read less than a minute
5 horas atrás, fredericopissarra disse:

gets() e gets_s() não constam da biblioteca padrão

Opa,

A get_s() é definida na C11 mas alguns compiladores não implementaram mesmo, não sei o motivo. De qualquer forma, se ele tá usando system("pause"), imagino que esteja no Windows e Visual Studio tem. ?

5 horas atrás, fredericopissarra disse:

Mas, como fui tão carinhosamente pedido para ignorar e "passar longe", curtindo minha vida amarga e triste, deixo para descobrirem...

O que acha de tanto você quando o Adauto relevarem essa história e esquecerem isso? Não faz bem pra vocês... ?

Abraços!

Link to post
Share on other sites
 Read less than a minute

é necessário utilizar ' . ' nas casas  decimais você está utilizando ' , '.

você utiliza ||, nesse caso a condição do salario ser > 0 é sempre satisfeita, você deve utilizar &&.

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...