Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sr.V

Como apagar os dados salvos na memoria ?

Recommended Posts

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

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
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
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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.