Adauto 0 Posted September 30, 2020 Share Posted September 30, 2020 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"); } Quote Link to post Share on other sites
fredericopissarra 278 Posted September 30, 2020 Share Posted September 30, 2020 Você sequer tentou compilar esse troço, tentou? Quote Link to post Share on other sites
Adauto 0 Posted October 1, 2020 Author Share Posted October 1, 2020 (edited) 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 October 1, 2020 by Adauto Quote Link to post Share on other sites
fredericopissarra 278 Posted October 1, 2020 Share Posted October 1, 2020 Blz... já que você não quer uma explicação sobre o problema, tá tudo certo... Quote Link to post Share on other sites
Administradores Fernando Mercês 0 Posted October 2, 2020 Administradores Share Posted October 2, 2020 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! Quote Link to post Share on other sites
fredericopissarra 278 Posted October 2, 2020 Share Posted October 2, 2020 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... Quote Link to post Share on other sites
Administradores Fernando Mercês 0 Posted October 2, 2020 Administradores Share Posted October 2, 2020 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! Quote Link to post Share on other sites
Administradores Fernando Mercês 0 Posted October 2, 2020 Administradores Share Posted October 2, 2020 Em tempo, aqui a galera sugere getline() ou fgets(). ? Quote Link to post Share on other sites
fredericopissarra 278 Posted October 2, 2020 Share Posted October 2, 2020 Também prefiro getline() em certos casos, para deixar a função alocar o buffer, mas ela é POSIX, não ISO. De fato, get_s() é mesmo definida na C11, mas gets() sumiu na C99 e não existe por lá também... talvez seja por isso. Quote Link to post Share on other sites
SirFeliX 0 Posted October 8, 2020 Share Posted October 8, 2020 é 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 &&. Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.