Calculadora de decimo terceiro salário em C [RESOLVIDO]

1. Calculadora de decimo terceiro salário em C [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 15/09/2017 - 23:50h

Estou fazendo uma calculadora de decimo terceiro salário em C,a logíca está certa,porém falta algum detalhe que ainda não percebi,veja o código do programa:


#include <stdio.h>

int main ()
{

int n1,n2,resultado;

printf ("\n Digite o seu salario:");
scanf ("%d",&n1);
printf ("\n Digite a quantidade de meses em que trabalhou:");
scanf ("%d",&n2);
resultado=(n1+n2)/12;



printf ("\n O seu decimo terceiro salario eh: %d" &resultado );

return 0;
}


Alguém pode me ajudar?


  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 16/09/2017 - 07:32h

O erro indicado acima pelo nosso colega “apostasia” poderia ser percebido se você instruísse o compilador a fazer diagnóstico de código. Se você usar o GCC como compilador, recomendo que use as seguintes opções de diagnóstico: -Wall -Werror -O2 -pedantic-errors.

Além do mais, considere os seguintes problemas secundários no seu programa:

    – Procure usar nomes de variáveis mais significativos. n1 e n2 sugerem que são dois dados do mesmo tipo, mas, na verdade, um mede dinheiro e o outro mede tempo. Assim sendo, considere usar nomes como salario_base e meses_trabalhados (ou, se você não quiser digitar nomes longos, alguma abreviatura, mas que preserve o sentido da coisa).

    – Por falar em sentido, qual o sentido de somar o salário base com o número de meses e dividir essa soma por doze? Será que você não quis dizer algo como salario_13=salario_base*meses_trabalhados/12 (note o produto em vez de soma)?

    – Tem certeza de que você quer que suas variáveis representem apenas valores inteiros? Os salários, tanto o base quanto o calculado, não podem ter centavos? Se o funcionário trabalhar apenas nos últimos dez dias do ano (menos do que um mês inteiro), isso não conta para o cálculo do 13º? Parece-me que você deveria usar valores em ponto flutuante, em vez de inteiros.

    – Acostume-se a colocar as quebras de linha ao final das strings de formatação (a não ser que você queira que o próximo texto a ser impresso ou digitado fique na mesma linha). Entre outras razões, existe o fato de que a saída padrão usa buffer orientado a linha, o que significa que o texto ficará retido, sem ser impresso, até que aconteça uma das seguinte possibilidades:
        - o programa envie um caráter de fim de linha ('\n') (se essa marca só vier no início da próxima linha, a mensagem só será exibida no momento em que o programa mandar imprimir essa outra linha);
        - se a próxima operação for uma operação de leitura do terminal (mas a mensagem ficará retida até essa operação de leitura iniciar);
        - se você forçar a escrita, mesmo sem quebra de linha, por meio da função fflush();
        - se o programa terminar sem erros (porque fflush() é chamada implicitamente quando o programa termina sem erros).

    – O padrão do C prescreve duas alterativas para declarar a função main(): ou como “int main(void)”, se você não quiser que o programa receba argumentos vindos do sistema operacional, ou como “int main(int argc, char **argv)”, caso você queira receber argumentos vindos do SO (no caso, argc será um contador da quantidade de argumentos, e argv é um vetor de strings, em que cada elemento corresponde a um argumento distinto; por convenção, o nome usado para invocar o programa fica guardado em argv[0]). A forma que você usou, “int main()”, significa que a função pode ser chamada com qualquer quantidade de argumentos de quaisquer tipos de dados (e.g. você poderia, dentro do seu programa escrever algo como main(3.14159265) ou main(main, printf, scanf, NULL)), e é aceita por compatibilidade com código antigo. Como seu código não é antigo, prefira ficar com o que o padrão preconiza.

    – Lembre-se de que as funções de leitura (principalmente scanf(), que é muito complexa) podem falhar. Acostume-se a verificar se elas foram bem sucedidas (alguns sistemas, como o Debian e o Ubuntu, inclusive exigem isso, não deixando programa compilar sem alarmes se você omitir o tratamento da sinalização de erros feita pela função).


Eis como eu reescreveria seu programa, considerando as dicas acima.

#include <stdio.h>

int main(void){
double salario_base, salario_13, n_meses;

printf("Digite o valor do salário mensal (em reais): ");
if(scanf("%lf", &salario_base)!=1)
goto erro_de_leitura;
printf("Digite a quantidade de meses trabalhados: ");
if(scanf("%lf", &n_meses)!=1)
goto erro_de_leitura;

salario_13=salario_base*n_meses/12.0;

printf ("\nSeu décimo-terceiro salário é de R$%0.2f.\n", salario_13);
return 0; /* Sai indicando sucesso. */

erro_de_leitura:
fprintf(stderr, "\nErro de leitura. Abortando o programa.\n");
return 1; /* Sai indicando falha. */
}


3. Re: Calculadora de decimo terceiro salário em C [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 16/09/2017 - 06:29h


--- salario_orig.c
+++ salario.c
@@ -13,7 +13,7 @@



-printf ("\n O seu decimo terceiro salario eh: %d" &resultado );
+printf ("\n O seu decimo terceiro salario eh: %d", resultado );

return 0;
}







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts