Antharaz 3 Denunciar post Postado Agosto 31, 2009 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
quitZAUMMM 18 Denunciar post Postado Setembro 1, 2009 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
Antharaz 3 Denunciar post Postado Setembro 1, 2009 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
quitZAUMMM 18 Denunciar post Postado Setembro 1, 2009 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
Antharaz 3 Denunciar post Postado Setembro 1, 2009 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
quitZAUMMM 18 Denunciar post Postado Setembro 1, 2009 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
Antharaz 3 Denunciar post Postado Setembro 1, 2009 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
quitZAUMMM 18 Denunciar post Postado Setembro 1, 2009 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
Antharaz 3 Denunciar post Postado Setembro 1, 2009 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
quitZAUMMM 18 Denunciar post Postado Setembro 1, 2009 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
Antharaz 3 Denunciar post Postado Setembro 1, 2009 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
quitZAUMMM 18 Denunciar post Postado Setembro 1, 2009 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
Antharaz 3 Denunciar post Postado Setembro 1, 2009 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
quitZAUMMM 18 Denunciar post Postado Setembro 1, 2009 http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Fique tranquilo não ligo muito pra esse negócio de reputação não, ligo + por você ter entendido e sanado suas dúvidas ;D []s Compartilhar este post Link para o post Compartilhar em outros sites