Sr.V 0 Denunciar post Postado Maio 15, 2011 Sr,s, bom estou com uma dúvida nesse código abaixo : #include<stdio.h> #include<stdlib.h> int main() { char nome[50]; float salariof,ganhos,comisao,vendas,inss,ir,ndependentes,dependentes,plano,opcao; for(;; ) { printf("Digite o nome do funcionario: \n"); scanf("%[^\n]c", &nome); printf("Informe o salario fixo do funcionario %s :\n",nome); scanf("%f",&salariof); printf("Informe o valor total de vendas do funcionario %s :\n",nome); scanf("%f",&vendas); printf("Informe o numero de dependentes do funcionario %s :\n",nome); scanf("%f",&ndependentes); if(vendas>20000) { comisao=vendas*0.05; } else { comisao=vendas*0.04; } ganhos=salariof+comisao; inss=ganhos*0.1; if(inss>400) { inss=400; }; ganhos=ganhos-inss; if(ndependentes>0) { dependentes=ndependentes*180; } ; ganhos=ganhos-dependentes; if(ganhos<=2000) { ir=0; } else { ir=(ganhos-2000)*0.2; ganhos=ganhos-ir; }; plano=50+(ndependentes*40); ganhos=ganhos-plano; printf("\n\n==================================\n"); printf("==================================\n"); printf("==================================\n"); printf("GANHOS \n"); printf("==================================\n"); printf("Vendas R$:%.2f\n",vendas); printf("Comisao R$:%.2f\n",comisao); printf("Salario R$:%.2f\n",salariof); printf("Dedependente(s) %.2f\n",ndependentes); printf("==================================\n"); printf("DESCONTOS \n"); printf("==================================\n"); printf("Dedependente(s) %.2f\n",dependentes); printf("Inss R$:%.2f\n",inss); printf("Ir R$:%.2f\n",ir); printf("Plano Saude R$:%.2f\n",plano); printf("==================================\n"); printf("Total a receber R$:%.2f\n",ganhos); printf("==================================\n"); printf("==================================\n"); printf("==================================\n\n\n"); printf("Deseja calcular o demonstrativo de pagamento de outro funcionario ? 0- Nao||1-Sim \n"); scanf("%f",&opcao); if(opcao==0) { break; } } getchar(); } O programa tá rodando normal, mais quando o usuário digita 1-sim, calcular outro pagamento, ele tá pulando a parte onde digitao nome do funcionario e utilizando o nome já salvo ! Gostaria de saber como faço para apagar os dados lidos anteriormente na variavel nome ? Compartilhar este post Link para o post Compartilhar em outros sites
guidjos 65 Denunciar post Postado Maio 15, 2011 Nem li seu código, mas pelo que disse, você está deixando um newline no buffer de entrada (stdin). Use a tag code para postar código. Assim talvez eu o leia. Compartilhar este post Link para o post Compartilhar em outros sites
Sr.V 0 Denunciar post Postado Maio 16, 2011 Nem li seu código, mas pelo que disse, você está deixando um newline no buffer de entrada (stdin). Use a tag code para postar código. Assim talvez eu o leia. 'guidjos',bom sou novo aki no forum, desculpe ,não sabia que tinha que postar os códigos com a tag .Eu tbm já tentei usar a função fflush(stdin); mais não funcionou.Grato pela atenção. Compartilhar este post Link para o post Compartilhar em outros sites
Renato Utsch 24 Denunciar post Postado Maio 16, 2011 Eu tbm já tentei usar a função fflush(stdin); mais não funcionou. Não tente. Isso não deve ser usado. Dê uma olhada no tópico abaixo para entender por que: http://forum.imasters.com.br/topic/336835-tutorial-systempause-e-fflushstdin/ Abraços :D Compartilhar este post Link para o post Compartilhar em outros sites
Sr.V 0 Denunciar post Postado Maio 18, 2011 Eu tbm já tentei usar a função fflush(stdin); mais não funcionou. Não tente. Isso não deve ser usado. Dê uma olhada no tópico abaixo para entender por que: http://forum.imasters.com.br/topic/336835-tutorial-systempause-e-fflushstdin/ Abraços :D 'Lord Evil' obrigado mais eu já tinha dado uma olhada nesse tópico, muito bom por sinal. Bom o meu problema eu consegui resolver modificando essa linha do código; printf("Digite o nome do funcionario: \n"); scanf("%[^\n]c", &nome); para: printf("Digite o nome do funcionario: \n"); scanf("%s", &nome); Agora a cada loop ele pede para digitar o nome do funcionario novamente. Mais agora ele não lê mais o nome completo quando o usuario digita spaço.Com o código %[^\n]s ele lia perfeitamente o nome completo mesmo quando tinha espaço. Alguem pode informar se existe outra maneira de fazer uma variável tipo char ler e imprimir um nome mesmo contendo espaços ? grato pela atenção Compartilhar este post Link para o post Compartilhar em outros sites
Renato Utsch 24 Denunciar post Postado Maio 18, 2011 Agora a cada loop ele pede para digitar o nome do funcionario novamente. Uai, mas não é para ser isso mesmo não? Quando se faz um menu, se faz um while(true), onde se usa continue; para recomeçar o loop e refazer o pedido para digitar o nome do usuário, e, se estiver certo, dá um break e continua a execução: while(true) { /* Mensagem sobre pedir dados ao usuário */ /* Pedir os dados */ if(/* Checar se dados estão corretos */) { /* Se está aqui, então dados estão corretos, então é só dar um break. */ break; } else { /* Se está aqui, então dados estão errados, refaça o loop para pedir novas informações... */ continue; } } /* A partir daqui, continuar a execução fazendo o que se deveria fazer com os dados passados pelo menu. */ Mais agora ele não lê mais o nome completo quando o usuario digita spaço.Com o código %[^\n]s ele lia perfeitamente o nome completo mesmo quando tinha espaço. É porque o scanf() para a execução quando encontra um espaço em branco quando se está usando strings. Isso acontece pois o fim da string é um caractere em branco (\0, ou nulo, para ser preciso). Ao encontrar um caractere desse tipo, o scanf() acha que é o fim da string, e para de ler. Para resolver isso, procure pela função fgets(). NUNCA utilize gets(), pois ele pode causar bugs graves no seu programa quanto a overflow. Só para você saber, pode usar fgets() com stdin, assim ele pega a string da input do usuário... Abraços :D Compartilhar este post Link para o post Compartilhar em outros sites