Ir para conteúdo

POWERED BY:

Arquivado

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

Antharaz

[Resolvido] Programa não associa depois do else

Recommended Posts

Abaixo está a source do programa:

 

PS:.. ainda não está pronto

 

 

/*
  Nome: Gerador de cpf/cnpj/titulo eleitoral/cgc
  Autor: Jorge Almeida Miguel 
  Date: 31/08/09 18:01
  Descrição: Programa feito 100% por Jorge Almeida Miguel. 
  Feito apenas para teste de conhecimento.
  O autor não se responsabiliza pelo mau uso do mesmo
*/

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
main()
{
char C,r;
int a,b,c,d,e,f,g,h,i,j,k,l,m,n;
printf("Programa feito totalmente por Jorge Almeida Miguel.\nFoi feito apenas para teste ");
printf("de conhecimento e o autor não se responsabiliza pelo mau uso do mesmo.\n\n\n\n\n\n");

 r = '2';
while (r == 2);
{
      
      
      
      printf ("O que deseja gerar? [1-CPF/2-CGC/3-TITULO/4-CNPJ]\n\n");

      scanf ("%c", &C);

         a = rand()%10;
         b = rand()%10;
         c = rand()%10;
         d = rand()%10;
         e = rand()%10;
         f = rand()%10;
         g = rand()%10;
         h = rand()%10;
         i = rand()%10;
         j = rand()%10;
         k = rand()%10;
         l = rand()%10;

      // PARTE RESPONSÁVEL POR GERAR CPFs

      if (C == '1')
      {
               
         l = a*10+b*9+c*8+d*7+e*6+f*5+g*4+h*3+i*2;
         j = l%11;
      
         if (j <= 1)
         j = 0;
         else
         j = 11 - j;
      
         k = a*11+b*10+c*9+d*8+e*7+f*6+g*5+h*4+i*3+j*2;
         k = k%11;
      
            if (k <= 1)
            k = 0;
            else
            k = 11 - k;
      
      
      printf ("\n\nO cpf gerado e: %i%i%i.%i%i%i.%i%i%i-%i%i", a,b,c,d,e,f,g,h,i,j,k);
      printf("\n\n\nDeseja sair do programa? [1-sim/2-nao]\n\n");
      scanf("%c",r);
      }
      else      
      // PARTE RESPONSÁVEL PARA GERAR CNPJ
      
      if (c == '4')
      {
            m = a*5+b*4+c*3+d*2+e*9+f*8+g*7+h*6+i*5+j*4+k*3+l*2;
            m = m%11;
            
            if (m <= 1)
            m = 0;
            else
            m = 11 - m;
            
            
            n = a*6+b*5+c*4+d*3+e*2+f*9+g*8+h*7+i*6+j*5+k*4+l*3+m*2;
            n = n%11;
            if (n <= 1)
            n = 0;
            else
            n = 11 - n;
            
                printf ("\n\nO CNPJ gerado e: %i%i.%i%i%i.%i%i%i/%i%i%i%i-%i%i", a,b,c,d,e,f,g,h,i,j,k,l,m,n);
            printf("\n\n\nDeseja sair do programa? [1-sim/2-nao]\n\n");
            scanf("%c",r);
            
            }
      

      getch();
      
      }
      
      }

 

Observe qus e eu digitar 1 quando pergunta o que quero gerar ele entra na primeira condição, porém se eu digitar 4 ele não entra nesta condição:

 

if (c == '4')

Ja testei a parte que gera cpf e que gera cnpj separadamente e funcionou perfeitamente...

 

 

Por favor, me ajudem...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara para você perceber seu erro, vou te dizer 2 palavras se você n perceber msm assim posta aki rs:

CASE SENSITIVE

 

e outra coloque '&' na frente da variavel qnd for realizar a leitura.

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não acrtedito que errei por algo tão besta...

 

rsrs

 

mas enfim...

 

coloquei o C(maiúsculo) no segundo if e adicionei "&" nas duas linhas de:

 

scanf("%c",&r);

 

 

Agora o problema é que quando pergunta:

 

Deseja sair do programa? [1-sim/2-nao]

 

 

Mesmo digitando 2 ele sai...

 

"/

 

PS:.. ja coloquei o & no scanf embaixo =x

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente limpar sempre o buffer qnd for ler char's.

assim:

scanf("%c%*c", %r);

veja se resolve, provavelmente seu programa n continua no loop por sujeira de buffer, ou um '\n' que ficou preso.

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz o que você falou mas não adiantou. Independente do númeo que coloco quando pergunta se quer sair ele vai direto para o getch. Abaixo há a source modificada:

 

/*  Nome: Gerador de cpf/cnpj/titulo eleitoral/cgc  
Autor: Jorge Almeida Miguel   
Date: 31/08/09 18:01  
Descrição: Programa feito 100% por Jorge Almeida Miguel.
Feito apenas para teste de conhecimento.  
O autor não se responsabiliza pelo mau uso do mesmo
*/
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
main()
{
      char C,r;
      int a,b,c,d,e,f,g,h,i,j,k,l,m,n;
      printf("Programa feito totalmente por Jorge Almeida Miguel.\nFoi feito apenas para teste ");
      printf("de conhecimento e o autor não se responsabiliza pelo mau uso do mesmo.\n\n\n\n\n\n"); 
      r = '2';
      while (r == 2);
      {
            printf ("O que deseja gerar? [1-CPF/2-CGC/3-TITULO/4-CNPJ]\n\n");      
            scanf ("%c%*c", &C);         
            a = rand()%10;         
            b = rand()%10;         
            c = rand()%10;         
            d = rand()%10;         
            e = rand()%10;         
            f = rand()%10;         
            g = rand()%10;         
            h = rand()%10;         
            i = rand()%10;         
            j = rand()%10;         
            k = rand()%10;         
            l = rand()%10;      
            
            
            
            // PARTE RESPONSÁVEL POR GERAR CPFs      
            
            if (C == '1')      
            {                        
            l = a*10+b*9+c*8+d*7+e*6+f*5+g*4+h*3+i*2;         
            j = l%11;               
            if (j <= 1)         
            j = 0;         
            else         
            j = 11 - j;               
            k = a*11+b*10+c*9+d*8+e*7+f*6+g*5+h*4+i*3+j*2;         
            k = k%11;                  
            if (k <= 1)            
            k = 0;            
            else            
            k = 11 - k;                  
            printf ("\n\nO cpf gerado e: %i%i%i.%i%i%i.%i%i%i-%i%i", a,b,c,d,e,f,g,h,i,j,k);      
            }      
            else
            
            // PARTE RESPONSÁVEL PARA GERAR CNPJ            
            if (C == '4')      
            {            
                         m = a*5+b*4+c*3+d*2+e*9+f*8+g*7+h*6+i*5+j*4+k*3+l*2;            
                         m = m%11;                        
                         if (m <= 1)            
                         m = 0;            
                         else            
                         m = 11 - m;                                    
                         n = a*6+b*5+c*4+d*3+e*2+f*9+g*8+h*7+i*6+j*5+k*4+l*3+m*2;            
                         n = n%11;            
                         if (n <= 1)            
                         n = 0;            
                         else            
                         n = 11 - n;                            
                         printf ("\n\nO CNPJ gerado e: %i%i.%i%i%i.%i%i%i/%i%i%i%i-%i%i", a,b,c,d,e,f,g,h,i,j,k,l,m,n);            
                         }            // fim do se
                         printf("\n\n\nDeseja sair do programa? [1-sim/2-nao]\n\n");            
                         scanf("%c%*c",&r);
                         }    // fim do while        
                         getch(); 
                         }

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara olhando seu código meio por cima veja a comparação q você faz no seu while.

você tem que comparar a variavel com um char n com um int;

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu já tinha tentado com o char, mas o programa quando parte do while não faz nada... apenas fica com o cursos piscando. Se eu apertar qualquer tecla ele continua lá parado.

 

"/

 

Alguma idéia?

 

while (r == '2');

 

 

========= EDITADO ========

 

Ja descobri...

 

como sempre uma bobeira...

 

além de ter que ser do tipo char a condição tinha um ; no final da linha do while...

 

 

 

 

PROBLEMA RESOLVIDO

 

 

 

Grato pela paciencia...

 

=D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na realidade eu tinha visto esse erro do ';', + n falei, pq do jeito q você tava falando seu programa tava rodando, até estranhei + hUFDSHAU..

.

q bom q conseguiw http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu comtinuei meu programa complementando ele e parece que está com outro erro:

 

/*  Nome: Gerador de cpf/cnpj/titulo eleitoral/cgc  
Autor: Jorge Almeida Miguel   
Date: 31/08/09 18:01  
Descrição: Programa feito 100% por Jorge Almeida Miguel.
Feito apenas para teste de conhecimento.  
O autor não se responsabiliza pelo mau uso do mesmo
*/
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
main()
{
      srand(time(NULL));
      char C,r;
      int a,b,c,d,e,f,g,h,i,j,k,l,m,n,w,q;
      printf("Programa feito totalmente por Jorge Almeida Miguel.\nFoi feito apenas para teste ");
      printf("de conhecimento e o autor não se responsabiliza pelo mau uso do mesmo.\n\n\n\n\n\n"); 
      r = '2';
      q = 1;
      while (r == '2')
      {
            printf ("\n\nO que deseja gerar? [1-CPF/2-CNPJ(CGC)]\n\n");      
            scanf ("%c%*c", &C);         
            a = rand()%10;         
            b = rand()%10;         
            c = rand()%10;         
            d = rand()%10;         
            e = rand()%10;         
            f = rand()%10;         
            g = rand()%10;         
            h = rand()%10;         
            i = rand()%10;         
            j = rand()%10;         
            k = rand()%10;         
            l = rand()%10;      
            
            
            
            // PARTE RESPONSÁVEL POR GERAR CPFs      

            if (C == '1')      
            {          
                  printf ("\n\nQuantos CPFs deseja gerar?\n\n");      
                  scanf ("%i", &w);
                  while (q <= w)
                  {
                      l = a*10+b*9+c*8+d*7+e*6+f*5+g*4+h*3+i*2;
                      j = l%11;               
                      if (j <= 1)         
                      j = 0;         
                      else         
                      j = 11 - j;               
                      k = a*11+b*10+c*9+d*8+e*7+f*6+g*5+h*4+i*3+j*2;         
                      k = k%11;                  
                      if (k <= 1)            
                      k = 0;            
                      else            
                      k = 11 - k;                  
                      printf ("\n\nCPF: %i%i%i.%i%i%i.%i%i%i-%i%i", a,b,c,d,e,f,g,h,i,j,k);      
                      q = q +1;
                  }
                  q = 0;
            }      
            else
            
            // PARTE RESPONSÁVEL PARA GERAR CNPJ            
            if (C == '2')      
            {            
                  printf ("\n\nQuantos CNPJs deseja gerar?\n\n");      
                  scanf ("%i", &w);
                  while (q <= w)
                  {
                        
                        m = a*5+b*4+c*3+d*2+e*9+f*8+g*7+h*6+i*5+j*4+k*3+l*2;            
                        m = m%11;                        
                        if (m <= 1)            
                        m = 0;            
                        else            
                        m = 11 - m;                                    
                        n = a*6+b*5+c*4+d*3+e*2+f*9+g*8+h*7+i*6+j*5+k*4+l*3+m*2;            
                        n = n%11;            
                        if (n <= 1)            
                        n = 0;            
                        else            
                        n = 11 - n;                            
                        printf ("\n\nCNPJ: %i%i.%i%i%i.%i%i%i/%i%i%i%i-%i%i", a,b,c,d,e,f,g,h,i,j,k,l,m,n);            
                        q = q+1;
                  }
                  q = 0;
            }            // fim do se
            printf("\n\n\nDeseja sair do programa? [1-sim/2-nao]\n\n");            
            scanf("%c%*c",&r);
      }    // fim do while        
}

 

 

O único problema que estou tendo agora é no while (r == '2'), mesmo digitando 2 na pergunta final ele sai do programa. Já verifiquei todos ; { } scanf mas não acho meu erro.

 

 

PS:.. antes de colcoar a função de gerar mais de uma cpf/cnpj esta condição do while funcionava perfeitamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha o pq q isso acontece eu naum sei, esse C vo te contar viw rs.

mais de uma coisa eu suspeito: sujeiro de buffer.

coloque %*c tbm na leitura dos inteiros.

 

e comece a usar o int main()....... return 0;

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como empre você estava certo...

 

era sujeira de buffer...

 

usei o %*c nos inteiros e está funcionando perfeitamente...

 

e comece a usar o int main()....... return 0;

Comecei a aprender c/c++ ontem cara... larguei o delphi para estudar c++, vou pesquisar sobre a diferença que o int faz antes da classe main() e o return 0;

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom é complicado dizer comecei aprender C/C++

ow você começa aprendendo C ou C++

você esta iniciando em C, e é bom pq terá q fazer muitas coisas na unha, depois qnd avançar para o C++, verá as vantagens que terá em relação a vetores, mapeamento, listas, pilhas e etc.

 

Qnt ao main(), ele retorna um valor para o sistema operacional e dai vem esse retorno 'int', para dizer que tudo ocorreu bem mandamos o 1 de volta, pq pode perceber pelo menos no code::blocks aparece, se da falha de segmentação ou qlqr erro ele retorna um valor != 0, e isso faz o programa abortar.

 

em C++ posse usar tbm o exit_success

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi...

 

^^

 

Agora eus ei porque tantagente usa o int antes do main() e coloca o return 0 no final...

 

xD

 

Obrigado novamente...

 

PS:.. ja pode fechar o tópico se quiser...

 

PS²:.. se o número de reputações que eu posso aumentar por dia já não estivesse no limite eu aumentaria sua reputação...

 

^^

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.