xMaiicon 0 Denunciar post Postado Junho 22, 2012 Então, eu estou tentando fazer um programa onde o programa oferece 3 opções de começo: 1 - Cadastrar 2 - Logar 3 - Fechar Depois de cadastrado, voltaria ao menu e apareceria denovo essas 3 opções, o que eu ainda nao fiz. Por enquanto o que tento fazer é que Cadastre o usuário, depois de cadastrado ir pro login, pede login e senha, se estiver certo loga, se não dá falha e fecha. Eu consegui fazer o programa funcionar direitinho, mas tudo no main, agora estou tentando dividir em funções, uma para o cadastro, posteriormente outras funções, mas depois de montar em funções, tive que montar 2 funções, uma para cadastrar o login, e outra para a senha, pois a função retornaria o valor final (login / senha) para a variável, e não sei como fazer retornar 2 valores para 2 variáveis diferentes. Então vim aqui pedir uma ajuda, no momento o código aponta 2 erros na função main, que são: "Incompatyble types when assigning to type 'char[20]' from type 'char'", os 2 são iguais, e apontam para as linhas: logando[a].user = cadastro_login(); logando[a].pass = cadastro_senha(); Enfim, aí vai o código: #include <stdio.h> #include <stdlib.h> #include <string.h> struct cadastro{ char user[20]; char pass[20]; char login[20]; char senha[20]; }cadastro; char cadastro_login() { struct cadastro usuario[1]; // for (a=0;a<3;a++) // { // b = a+1; system("cls"); printf("\n\tCadastro"); puts("\n\n\tDigite o login: "); printf("\t"); scanf(" %s",usuario[0].user); // } return(*usuario[0].user); } char cadastro_senha() { struct cadastro password[1]; puts("\tDigite a senha: "); printf("\t"); scanf(" %s",password[0].pass); system("cls"); return(*password[0].pass); } int main(void) { int a,b,c,d,nc; int logado; int op; //char user[3][20],pass[3][20]; char login[20], senha[20]; struct cadastro logando[3]; printf("1 - Cadastro\n"); printf("2 - Logar\n"); printf("3 - Fechar\n"); scanf("%d", &op); if (op == 1) { printf("\nQuantos cadastros deseja fazer? \n"); scanf("%d",&nc); for (a=0;a<nc;a++){ logando[a].user = cadastro_login(); logando[a].pass = cadastro_senha(); } } else if (op == 3) exit(0); system("cls"); printf("\n\tLogon\n"); printf("\n\tLogin: "); scanf(" %s",&login); printf("\n\tSenha: "); scanf(" %s",&senha); for (c=0;c<3;c++) { if ((strcmp(login,logando[c].user)!=0) || (strcmp(senha,logando[c].pass)!=0)) { logado= 1; //login e/ou senha incorretos } else if(strcmp(login,logando[c].user)==0) { if (strcmp(senha,logando[c].pass)==0) { logado = 2; //logado com sucesso break; } } } if (logado==1) { printf("\nLogin e/ou senha incorretos(s)\n"); } else if (logado==2) { printf("\nLogado com sucesso!\nBem-vindo(a) %s\n",login[0]); } } Qualquer "coisa de noob" aí é normal, sou bem iniciante xD Compartilhar este post Link para o post Compartilhar em outros sites
Renato Utsch 24 Denunciar post Postado Junho 22, 2012 Olá! O que acontece é que você está tentando inserir o valor de um char em um vetor de chars. O correto seria utilizar a função strcpy() da <string.h> para copiar a string retornada para o vetor e retornar um ponteiro de caractere para o início da string em cada função. Além disso, que eu detectei, faltou a instrução de return em main() (embora, até onde eu me lembre, o retorno de main() a partir da C99 seja facultativo, é bom manter backward compatibility se isso não vai te causar trabalho). Abaixo o código: #include <stdio.h> #include <stdlib.h> #include <string.h> struct cadastro { char user[20]; char pass[20]; char login[20]; char senha[20]; } cadastro; char *cadastro_login() { struct cadastro usuario[1]; // for (a=0;a<3;a++) // { // b = a+1; system("cls"); printf("\n\tCadastro"); puts("\n\n\tDigite o login: "); printf("\t"); scanf(" %s",usuario[0].user); // } returnusuario[0].user; } char *cadastro_senha() { struct cadastro password[1]; puts("\tDigite a senha: "); printf("\t"); scanf(" %s",password[0].pass); system("cls"); return password[0].pass; } int main(void) { int a,b,c,d,nc; int logado; int op; //char user[3][20],pass[3][20]; char login[20], senha[20]; struct cadastro logando[3]; printf("1 - Cadastro\n"); printf("2 - Logar\n"); printf("3 - Fechar\n"); scanf("%d", &op); if (op == 1) { printf("\nQuantos cadastros deseja fazer? \n"); scanf("%d",&nc); for (a=0;a<nc;a++){ strcpy(logando[a].user, cadastro_login()); strcpy(logando[a].pass, cadastro_senha()); } } else if (op == 3) exit(0); system("cls"); printf("\n\tLogon\n"); printf("\n\tLogin: "); scanf(" %s",&login); printf("\n\tSenha: "); scanf(" %s",&senha); for (c=0;c<3;c++) { if ((strcmp(login,logando[c].user)!=0) || (strcmp(senha,logando[c].pass)!=0)) { logado= 1; //login e/ou senha incorretos } else if(strcmp(login,logando[c].user)==0) { if (strcmp(senha,logando[c].pass)==0) { logado = 2; //logado com sucesso break; } } } if (logado==1) { printf("\nLogin e/ou senha incorretos(s)\n"); } else if (logado==2) { printf("\nLogado com sucesso!\nBem-vindo(a) %s\n",login[0]); } return 0; } Em caso de boa prática, geralmente se recomenda utilizar memcpy() ao invés de strcpy() onde possível, por ser uma função consideravelmente mais rápida. Que fique como uma diversãozinha substituir o strcpy() por memcpy(), se quiser postar depois como você fez para vermos se está certo... você vai precisar algum dia :) Abraços :D Compartilhar este post Link para o post Compartilhar em outros sites
xMaiicon 0 Denunciar post Postado Junho 22, 2012 Valeu mesmo, lol, esse memcpy eu nem conhecia xP, pesquisei aqui rapidinho e alterei pra ele mesmo, eu não vi diferença mas beleza uihuaiehua. Alterei poucas coisas que estavam erradas no seu código,tipo um espaço ali um () aqui xD, foram essas: de returnusuario[0].user; para return (usuario[0].user); de return password[0].pass; para return (password[0].pass); de: int a,b,c,d,nc; int logado; int op; //char user[3][20],pass[3][20]; char login[20], senha[20]; struct cadastro logando[3]; para: int a,b,c,d,nc; int logado; int op; char login[1][20], senha[1][20]; struct cadastro logando[3]; de: strcpy(logando[a].user, cadastro_login()); strcpy(logando[a].pass, cadastro_senha()); para: memcpy(logando[a].user, cadastro_login(), 50); memcpy(logando[a].pass, cadastro_senha(), 50); Isso e as partes que precisaria mudar alterando isso, ficando assim: #include <stdio.h> #include <stdlib.h> #include <string.h> struct cadastro { char user[20]; char pass[20]; char login[20]; char senha[20]; } cadastro; char *cadastro_login() { struct cadastro usuario[1]; system("cls"); printf("\n\tCadastro"); puts("\n\n\tDigite o login: "); printf("\t"); scanf(" %s",usuario[0].user); return (usuario[0].user); } char *cadastro_senha() { struct cadastro password[1]; puts("\tDigite a senha: "); printf("\t"); scanf(" %s",password[0].pass); system("cls"); return (password[0].pass); } int main(void) { int a,b,c,d,nc; int logado; int op; char login[1][20], senha[1][20]; struct cadastro logando[3]; printf("1 - Cadastro\n"); printf("2 - Logar\n"); printf("3 - Fechar\n"); scanf("%d", &op); if (op == 1) { printf("\nQuantos cadastros deseja fazer? \n"); scanf("%d",&nc); for (a=0;a<nc;a++){ memcpy(logando[a].user, cadastro_login(), 50); memcpy(logando[a].pass, cadastro_senha(), 50); } } else if (op == 3) exit(0); system("cls"); printf("\n\tLogon\n"); printf("\n\tLogin: "); scanf(" %s",login[0]); printf("\n\tSenha: "); scanf(" %s",senha[0]); for (c=0;c<3;c++) { if ((strcmp(login[0],logando[c].user)!=0) || (strcmp(senha[0],logando[c].pass)!=0)) { logado = 1; //login e/ou senha incorretos } else if(strcmp(login[0],logando[c].user)==0) { if (strcmp(senha[0],logando[c].pass)==0) { logado = 2; //logado com sucesso break; } } } if (logado==1) { printf("\nLogin e/ou senha incorretos(s)\n"); } else if (logado==2) { printf("\nLogado com sucesso!\nBem-vindo(a) %s\n",login[0]); } return 0; } Então, valeu mesmo cara, tudo certo no código? xP Teria como me dizer se seria difícil (pra mim (iniciante)) transformar esse login em uma função fora do main, e guardar os cadastros em um arquivo .txt? E se possível me dizer como, eu agradeço xP Compartilhar este post Link para o post Compartilhar em outros sites
Renato Utsch 24 Denunciar post Postado Junho 23, 2012 Valeu mesmo, lol, esse memcpy eu nem conhecia xP, pesquisei aqui rapidinho e alterei pra ele mesmo, eu não vi diferença mas beleza uihuaiehua. Alterei poucas coisas que estavam erradas no seu código,tipo um espaço ali um () aqui xD, foram essas: de returnusuario[0].user; para return (usuario[0].user); Foi mal, erros acontecem xD Mas o parêntesis não é necessário não. de return password[0].pass; para return (password[0].pass); Como disse acima também, o parêntesis não é necessário aqui. de: int a,b,c,d,nc; int logado; int op; //char user[3][20],pass[3][20]; char login[20], senha[20]; struct cadastro logando[3]; para: int a,b,c,d,nc; int logado; int op; char login[1][20], senha[1][20]; struct cadastro logando[3]; Essa parte eu nem mexi, eu só mexi nas strings mesmo. de: strcpy(logando[a].user, cadastro_login()); strcpy(logando[a].pass, cadastro_senha()); para: memcpy(logando[a].user, cadastro_login(), 50); memcpy(logando[a].pass, cadastro_senha(), 50); Esse memcpy() que você colocou tá perigoso, sempre colocque o limite da string que você está copiando, porque aí caso alguém digitar mais caracteres do que era para digitar, não vai dar buffer overflow no logando[a].user/.pass, porque quando chegar no limite vai parar. E como não é adicionado um '\n' no final da string com o memcpy(), precisamos fazer isso. O correto seria isso: memcpy(logando[a].user, cadastro_login(), 19); logando[19].user = '\n'; memcpy(logando[a].pass, cadastro_senha(), 19); logando[19].pass = '\n'; Uma alternativa ainda melhor seria utilizar o strncpy(), que vai limitar o limite de caracteres copiados para não dar buffer overflow e ainda vai adicionar o '\n' no final. Outra coisa que sugiro é usar macros para definir constantes, como o 20 que você usou. Aí caso você mudar o tamanho da string, só precisa mudar em um lugar, os outros mudam automaticamente. Não tem que ficar caçando onde colocou o 20 e agora você mudou pra, por exemplo, 30... Então, valeu mesmo cara, tudo certo no código? xP Não sei, tá rodando? O que eu vi de relance foi aquilo mesmo. Teria como me dizer se seria difícil (pra mim (iniciante)) transformar esse login em uma função fora do main, e guardar os cadastros em um arquivo .txt? E se possível me dizer como, eu agradeço xP Sempre terá que separar as coisas do main(), mais cedo ou mais tarde, iniciante ou não. Isso é algo bem básico, com o básico de noção de funções você consegue separar ;) Para guardar os cadastros em um .txt você vai ter que usar a I/O de arquivos da C. As funções de I/O de arquivos se localizam no header <stdio.h>, procure por isso depois no google pra aprender a usar ;) Abraços :D Compartilhar este post Link para o post Compartilhar em outros sites
xMaiicon 0 Denunciar post Postado Junho 24, 2012 A parte do login e do cadastro em funções eu consegui fazer, só falta a parte de arquivos, e o memcpy, não precisa mais, eu montei uma struct, e um cara me falou pra usar variaveis globais, e ficou tudo beleza :P E eu não sabia que não precisava dos parênteses, mas agora não vou precisar usar mesmo xD Código: #include <stdio.h> #include <stdlib.h> #include <string.h> struct cadastro{ char user[20]; char pass[20]; int codigo;; }usuario[1000]; void cadastro_cliente(int a) { system("cls"); usuario[a].codigo = a+1; printf("\n\tCadastro %d",usuario[a].codigo); puts("\n\n\tDigite o login: "); printf("\t"); scanf(" %s",usuario[a].user); puts("\tDigite a senha: "); printf("\t"); scanf(" %s",usuario[a].pass); system("cls"); } void logar_sist() { int c; int logado; char login[1][20], senha[1][20]; erro_login: printf("\n\tLogon\n"); printf("\n\tLogin: "); scanf(" %s",login[0]); printf("\n\tSenha: "); scanf(" %s",senha[0]); for (c=0;c<1000;c++) { if ((strcmp(login[0],usuario[c].user)!=0) || (strcmp(senha[0],usuario[c].pass)!=0)) { logado = 1; //login e/ou senha incorretos } else if(strcmp(login[0],usuario[c].user)==0) { if (strcmp(senha[0],usuario[c].pass)==0) { logado = 2; //logado com sucesso break; } } } if (logado==1) { system("cls"); printf("\nLogin e/ou senha incorreto(s)\n"); printf("\nTente Novamente!\n"); goto erro_login; } else if (logado==2) { system("cls"); printf("\nLogado com sucesso!\n\nBem-vindo(a) %s\n",login[0]); printf("Codigo do usuario: %d\n\n",usuario[c].codigo); } } int main(void) { int a = 0,b,c,nc; int logado; int op; int codigo[1000]; tela_inicial: printf("1 - Cadastro\n"); printf("2 - Logar\n"); printf("3 - Fechar\n"); scanf("%d", &op); system("cls"); if (op == 1) { printf("\nQuantos cadastros deseja fazer? \n"); scanf("%d",&nc); if (a==0) { for (a=0;a<nc;a++) { cadastro_cliente(a); } goto tela_inicial; } else if (a!=0) { b = a; c = a+nc-1; printf("\n%d\n",a); for (a=b;a<=c;a++) { cadastro_cliente(a); } goto tela_inicial; } } else if (op == 2) logar_sist(); else if (op == 3) exit(0); return 0; } Dá uma olhada aí pra ver como ficou xD -------------------------- Agora tem outra coisa, quando eu cadastro um usuário, o programa verifica se o login existe, logo que digitado o login, mas ele está fechando, e eu tenho quase certeza de que o problema é na função validar_login, pode me ajudar aqui? Recomendo que veja no Code::Blocks o programa, vai ficar mais legível xD #include <stdio.h> #include <stdlib.h> #include <string.h> #define conta_adm "root" #define senha_adm "root" void login_adm(); void menu_login_inicial(); struct cadastro{ char user[20]; char pass[20]; int codigo; }usuario[1000],admin[20],cadastro_user[1000]; int validar_login_usuario(int a,int c) { char verifica_login[20],usuario1[20]; int r; memcpy(verifica_login,usuario[c].user,50); memcpy(usuario1,cadastro_user[a].user,50); if (strcmp(verifica_login,usuario1)==0) { r = 1; //usuario ja existe } else r = 0; //usuario nao existe return (r); } void cadastro_cliente(int a) { int b = 0,c; system("cls"); usuario[a].codigo = a+1; printf("\n\tCadastro %d",usuario[a].codigo); puts("\n\n\tDigite o login: "); printf("\t"); scanf(" %s",cadastro_user[a].user); if (b==0) { for (c=0;c<1000;c++) { b = validar_login_usuario(a,c); if (b==1) { printf("\nLogin ja existente!\n"); break; } } if (b==0) { puts("\tDigite a senha: "); printf("\t"); scanf(" %s",usuario[a].pass); } } } void cadastro_administrador(int a) { system("cls"); admin[a].codigo = a+1; printf("\n\tCadastro %d",admin[a].codigo); puts("\n\n\tDigite o login: "); printf("\t"); scanf(" %s",admin[a].user); puts("\tDigite a senha: "); printf("\t"); scanf(" %s",admin[a].pass); system("cls"); } void logar_usuario() { int c; int logado; char login[1][20], senha[1][20]; char fechar_login[] = {"EXIT"}, fechar_senha[] = {"EXIT"}; erro_login: printf("\n\tPara fechar digite o usuario e a senha EXIT em maiusculo\n"); printf("\n\tLogon\n"); printf("\n\tLogin: "); scanf(" %s",login[0]); printf("\n\tSenha: "); scanf(" %s",senha[0]); if ((strcmp(login[0],fechar_login)==0)&&(strcmp(senha[0],fechar_senha)==0)) exit(0); else { for (c=0;c<1000;c++) { if ((strcmp(login[0],usuario[c].user)!=0) || (strcmp(senha[0],usuario[c].pass)!=0)) { logado = 1; //login e/ou senha incorretos } else if((strcmp(login[0],usuario[c].user)==0) && (strcmp(senha[0],usuario[c].pass)==0)) { logado = 2; //logado com sucesso break; } } if (logado==1) { system("cls"); printf("\nLogin e/ou senha incorreto(s)\n"); printf("\nTente Novamente!\n"); goto erro_login; } else if (logado==2) { system("cls"); printf("\nLogado com sucesso!\n\nBem-vindo(a) %s\n",login[0]); printf("Codigo do usuario: %d\n\n",usuario[c].codigo); } } } void logar_adm() { int c; int logado; char login[1][20], senha[1][20]; char fechar_login[] = {"EXIT"}, fechar_senha[] = {"EXIT"}; erro_login: printf("\n\tPara fechar digite o usuario e a senha EXIT em maiusculo\n"); printf("\n\tLogon\n"); printf("\n\tLogin: "); scanf(" %s",login[0]); printf("\n\tSenha: "); scanf(" %s",senha[0]); if ((strcmp(login[0],conta_adm)==0)&&(strcmp(login[0],senha_adm)==0)) logado = 2; else if ((strcmp(login[0],fechar_login)==0)&&(strcmp(senha[0],fechar_senha)==0)) exit(0); else { for (c=0;c<1000;c++) { if ((strcmp(login[0],admin[c].user)!=0) || (strcmp(senha[0],admin[c].pass)!=0)) { logado = 1; //login e/ou senha incorretos } else if((strcmp(login[0],admin[c].user)==0) && (strcmp(senha[0],admin[c].pass)==0)) { logado = 2; //logado com sucesso break; } } } if (logado==1) { system("cls"); printf("\nLogin e/ou senha incorreto(s)\n"); printf("\nTente Novamente!\n"); goto erro_login; } else if (logado==2) { system("cls"); printf("\n\tLogado com sucesso!\n\n\tBem-vindo(a) %s\n",login[0]); // printf("Codigo do ADMIN: %d\n\n",admin[c].codigo); login_adm(); } } void login_adm() { int op_adm; int a=0,adm_cad=0,b,c,nc; tela_inicial_adm: printf("\n\t1- Cadastro de usuarios\n"); printf("\n\t2- Cadastro de administradores\n"); printf("\n\t9- Voltar a tela de login\n"); printf("\n\t0- Fechar\n"); printf("\t"); scanf("%d", &op_adm); system("cls"); if (op_adm == 1) { printf("\nQuantos cadastros deseja fazer? \n"); scanf("%d",&nc); if (a==0) { for (a=0;a<nc;a++) { cadastro_cliente(a); } goto tela_inicial_adm; } else if (a!=0) { b = a; c = a+nc-1; printf("\n%d\n",a); for (a=b;a<=c;a++) { cadastro_cliente(a); } goto tela_inicial_adm; } } else if (op_adm == 2) { printf("\nQuantos cadastros deseja fazer? \n"); scanf("%d",&nc); if (adm_cad==0) { for (adm_cad=0;adm_cad<nc;adm_cad++) { cadastro_administrador(adm_cad); } goto tela_inicial_adm; } else if (adm_cad!=0) { b = adm_cad; c = adm_cad+nc-1; printf("\n%d\n",a); for (adm_cad=b;adm_cad<=c;adm_cad++) { cadastro_administrador(adm_cad); } goto tela_inicial_adm; } } else if (op_adm == 0) exit(0); else if (op_adm == 9) menu_login_inicial(); } void menu_login_inicial() { int op_login; menu_de_login: printf("1- Login de USUARIO\n"); printf("2- Login de ADMINISTRADOR\n"); printf("0- FECHAR\n"); scanf(" %d",&op_login); if (op_login==1) logar_usuario(); else if (op_login==2) logar_adm(); else if (op_login==0) exit(0); else { system("cls"); printf("Opcao invalida!\n"); goto menu_de_login; } } int main(void) { menu_login_inicial(); return 0; } ----------------------------------- Bom, eu consegui arrumar o que estava errado, que no momento eu não lembro o que era xP Vou deixar o código aqui, se alguém que está iniciando como eu quiser dar uma olhada, até usar esse código, tá certo que não é o melhor que vão achar, nem o melhor jeito de fazer (acho eu), mas fazendo um código assim já dá pra começar a entender um pouquinho de C xD (ou não). #include <stdio.h> #include <stdlib.h> #include <string.h> #define conta_adm "root" #define senha_adm "root" void login_adm(); void menu_login_inicial(); void login_usuario(); int validar_login_usuario(); struct cadastro{ char user[20]; char pass[20]; int codigo; }usuario[1000],admin[50],cadastro_user[1000],cad_admin[50]; int validar_login_usuario(int a,int c) { int r; if (strcmp(cadastro_user[a].user,usuario[c].user)==0) { r = 1; //usuario ja existe } else r = 0; //usuario nao existe return (r); } int validar_login_adm(int a,int c) { int r; if (strcmp(cad_admin[a].user,admin[c].user)==0) { r = 1; //usuario ja existe } else r = 0; //usuario nao existe return (r); } void cadastro_cliente(int a) { int b,c; system("cls"); usuario_existente: usuario[a].codigo = a+1; printf("\n\tCadastro %d",usuario[a].codigo); puts("\n\n\tDigite o login: "); printf("\t"); scanf(" %s",cadastro_user[a].user); for (c=0;c<1000;c++) { b = validar_login_usuario(a,c); if (b==1) break; } if (b==0) { memcpy(usuario[a].user,cadastro_user[a].user,50); puts("\tDigite a senha: "); printf("\t"); scanf(" %s",usuario[a].pass); } else if (b==1) { printf("\nLogin ja existente!\n"); goto usuario_existente; } } void cadastro_administrador(int a) { int b,c; system("cls"); admin_existente: admin[a].codigo = a+1; printf("\n\tCadastro %d",admin[a].codigo); puts("\n\n\tDigite o login: "); printf("\t"); scanf(" %s",cad_admin[a].user); for (c=0;c<50;c++) { b = validar_login_adm(a,c); if (b==1) break; } if (b==0) { memcpy(admin[a].user,cad_admin[a].user,50); puts("\tDigite a senha: "); printf("\t"); scanf(" %s",admin[a].pass); } else if (b==1) { printf("\nLogin ja existente!\n"); goto admin_existente; } } void logar_usuario() { int c; int logado; char login[1][20], senha[1][20]; char fechar_login[] = {"EXIT"}, fechar_senha[] = {"EXIT"}; erro_login: printf("\n\tPara fechar digite o usuario e a senha EXIT em maiusculo\n"); printf("\n\tLogon\n"); printf("\n\tLogin: "); scanf(" %s",login[0]); printf("\n\tSenha: "); scanf(" %s",senha[0]); if ((strcmp(login[0],fechar_login)==0)&&(strcmp(senha[0],fechar_senha)==0)) exit(0); else { for (c=0;c<1000;c++) { if ((strcmp(login[0],usuario[c].user)!=0) || (strcmp(senha[0],usuario[c].pass)!=0)) { logado = 1; //login e/ou senha incorretos } else if((strcmp(login[0],usuario[c].user)==0) && (strcmp(senha[0],usuario[c].pass)==0)) { logado = 2; //logado com sucesso break; } } if (logado==1) { system("cls"); printf("\nLogin e/ou senha incorreto(s)\n"); printf("\nTente Novamente!\n"); goto erro_login; } else if (logado==2) { system("cls"); printf("\nLogado com sucesso!\n\nBem-vindo(a) %s\n",login[0]); printf("Codigo do usuario: %d\n\n",usuario[c].codigo); login_usuario(); } } } void login_usuario() { int op_user; tela_inicial_user: printf("\n\t9- Voltar a tela inicial de login"); printf("\n\t0- Fechar\n\t"); scanf("%d",&op_user); if (op_user==9) {system("cls");menu_login_inicial();} else if (op_user==0) exit(0); else {system("cls"); printf("\n\tOpcao Invalida\n"); goto tela_inicial_user;} } void logar_adm() { int c; int logado; char login[1][20], senha[1][20]; char fechar_login[] = {"EXIT"}, fechar_senha[] = {"EXIT"}; erro_login: printf("\n\tPara fechar digite o usuario e a senha EXIT em maiusculo\n"); printf("\n\tLogon\n"); printf("\n\tLogin: "); scanf(" %s",login[0]); printf("\n\tSenha: "); scanf(" %s",senha[0]); if ((strcmp(login[0],conta_adm)==0)&&(strcmp(login[0],senha_adm)==0)) logado = 2; else if ((strcmp(login[0],fechar_login)==0)&&(strcmp(senha[0],fechar_senha)==0)) exit(0); else { for (c=0;c<1000;c++) { if ((strcmp(login[0],admin[c].user)!=0) || (strcmp(senha[0],admin[c].pass)!=0)) { logado = 1; //login e/ou senha incorretos } else if((strcmp(login[0],admin[c].user)==0) && (strcmp(senha[0],admin[c].pass)==0)) { logado = 2; //logado com sucesso break; } } } if (logado==1) { system("cls"); printf("\nLogin e/ou senha incorreto(s)\n"); printf("\nTente Novamente!\n"); goto erro_login; } else if (logado==2) { system("cls"); printf("\n\tLogado com sucesso!\n\n\tBem-vindo(a) [ADM]%s\n",login[0]); // printf("Codigo do ADMIN: %d\n\n",admin[c].codigo); login_adm(); } } void login_adm() { int op_adm; int a=0,adm_cad=0,b,c,nc; tela_inicial_adm: printf("\n\t1- Cadastro de usuarios\n"); printf("\n\t2- Cadastro de administradores\n"); printf("\n\t9- Voltar a tela de login\n"); printf("\n\t0- Fechar\n"); printf("\t"); scanf("%d", &op_adm); system("cls"); if (op_adm == 1) { printf("\nQuantos cadastros deseja fazer? \n"); scanf("%d",&nc); if (a==0) { for (a=0;a<nc;a++) { cadastro_cliente(a); } goto tela_inicial_adm; } else if (a!=0) { b = a; c = a+nc-1; printf("\n%d\n",a); for (a=b;a<=c;a++) { cadastro_cliente(a); } goto tela_inicial_adm; } } else if (op_adm == 2) { printf("\nQuantos cadastros deseja fazer? \n"); scanf("%d",&nc); if (adm_cad==0) { for (adm_cad=0;adm_cad<nc;adm_cad++) { cadastro_administrador(adm_cad); } goto tela_inicial_adm; } else if (adm_cad!=0) { b = adm_cad; c = adm_cad+nc-1; printf("\n%d\n",a); for (adm_cad=b;adm_cad<=c;adm_cad++) { cadastro_administrador(adm_cad); } goto tela_inicial_adm; } } else if (op_adm == 0) exit(0); else if (op_adm == 9) menu_login_inicial(); } void menu_login_inicial() { int op_login; menu_de_login: printf("1- Login de USUARIO\n"); printf("2- Login de ADMINISTRADOR\n"); printf("0- FECHAR\n"); scanf(" %d",&op_login); if (op_login==1) logar_usuario(); else if (op_login==2) logar_adm(); else if (op_login==0) exit(0); else { system("cls"); printf("Opcao invalida!\n"); goto menu_de_login; } } int main(void) { menu_login_inicial(); return 0; } Pra mim agora só falta eu ligar o código a arquivos de texto com os cadastros :P E foi mal pelos 3 posts seguidos, só tou deixando o código aqui pra verem como tá. Compartilhar este post Link para o post Compartilhar em outros sites