1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Autenticação login C

Discussão em 'Programação' iniciada por Neo4, 25 de Junho de 2007. (Respostas: 7; Visualizações: 1525)

  1. Neo4

    Neo4 Banido

    Boas, estou a criar um sistema simples de logins num programita em c
    ja consegui tratar da parte do registo de utilizadores que ficará num ficheiro com o nome e a password respectiva na mesma linha.

    agora estou a tentar dar para fazer login com esses utilizadores criados..
    se so tiver um no ficheiro dá direito mas se tiver mais so dá o primeiro da lista e mesmo esse as vezes corre 2x a função main...

    bem vai aqui o codigo:

    int login()
    {

    char Nome[30], Pass[10], Name[30], Password[10];
    FILE *fp;

    fp= fopen("Regis.txt", "r");
    if(fp==NULL) {printf( "Nenhum Utilizador Registado por favor crie o seu Login\n\n"); main();}

    printf("Introduza o seu Nome de utilizador\n");
    scanf("%s", Nome);
    printf("Introduza a Password:\n");
    scanf("%s", Pass);

    while(fscanf(fp, "%s %s", Name, Password) !=EOF)
    if(strcmp(Name, Nome)==0 && strcmp(Password, Pass)==0) {printf("Login Correcto\n\n\n"); menu();break;}
    else {printf("Login ERRADO!\n\n\n"); main();}

    fclose(fp);

    }


    thanks ;)
     
  2. greven

    greven Folding Artist

    Sinceramente... tu não podes chamar a função main. A função main nunca é invocada, simplesmente invoca as outras. Pelo menos de todos os programas, livros e afins que já fiz/li nunca vi tal coisa. Pelo menos en ANSI C.
     
  3. BMarques

    BMarques Power Member

    Realmente essa chamada assim ao main é demasiado... estranha. Nada convencional mesmo.

    Se o teu objectivo era parar a função login e voltar ao main, devias faze-lo com um return!
     
  4. brazuca

    brazuca Power Member

    vivendo e aprendendo, na verdade eu nunca vi em lugar algum dizendo que chamar o main era errado, porem, nunca vi tambem que ele poderia ser chamado hehe. em todo caso, porque voce nao altera esse login() para ele retornar 1 ou 0 ? assim, la no main, faz um if ou um switch correr de acordo com a resposta do login().
     
  5. Neo4

    Neo4 Banido

    errado ou nao o problema penso que nao está aí pois a comparaçao entre o que está no ficheiro e o que é escrito é que nao funciona bem...
     
  6. greven

    greven Folding Artist

    GDB ou DDD é teu amigo. Usa e abusa. :D
     
  7. Neo4

    Neo4 Banido

    lol essa cadeira ja ficou para tras :p

    btw ja resolvi o problema que era simples era no ciclo while...
    e tambem ja tirei as chamadas da função main
     
  8. Neo4

    Neo4 Banido

    Bem estou aqui com um novo problemita.
    a autenticaçao ja dá direito e inclusivé é guardada no ficheiro a data de registo do utilizador.
    mas agora preciso de guardar a data do ultimo login e ela ser actualizada conforme se vai ao programa...
    mas nao estou a conseguir pois aquilo fica escrito em cima da outra data. aqui vai o codigo:
    Código:
    #include<stdio.h>
    #include<time.h>
    main () 
    {
    principal();
    }
    
    
    
    principal()
    {
    int i;
    
    
    printf("Benvindo à arca de jogos mais foleira que existe\n Press 1 to log in \n Press 2 to register \n press 3 to **** off \n");
    
    scanf("%d", &i);
    switch (i)
       {
         case 1 : login(); break;
         case 2 : reg(); break;
         case 3 : return(0);
        }
    
    }
    
    int login() 
    {
    
    char Nome[30], Pass[10], Name[30], Password[10], Data[30], Datab[30];
    FILE *fp;
    
    fp= fopen("Regis.txt", "r+");
    
    if(fp==NULL) {printf( "Nenhum Utilizador Registado por favor crie o seu Login\n\n");principal();}
    	else
    		{
    		 printf("Introduza o seu Nome de utilizador\n");
    		 scanf("%s", Nome);
    		 printf("Introduza a Password:\n");
    		 scanf("%s", Pass);
    
    
    			while(fscanf(fp, "%s %s %s", Name, Password, Data) !=EOF)
    			        {
    			            if (strcmp(Name, Nome)==0 && strcmp(Password, Pass)==0) 
    					{fprintf(fp,"%s\n",__DATE__); fclose(fp); verifica(0);}
    			        }
    
    		}
    }
    
    int verifica(int num)
    {
    if (num==0) {printf("Longin correcto\n\n"); menu();}
    if(num!=0) {printf("login errado\n\n"); principal();}
    
    }
    
    
    
    
    int reg() 
    {
    char Name[30], Password[10], Nome[30], Pass[10], Data[40];
    FILE *fp;
    
    
    
    
    fp = fopen( "Regis.txt", "a+");
    printf("Introduza o seu nome de Utilizador:\n");
    scanf ("%s", Nome);
    printf("Introduza a password:\n");
    scanf("%s", &Pass);
    
    
    while(fscanf(fp, "%s %s %s", Name, Password, Data) !=EOF)
            {
                if (strcmp(Name, Nome)==0) {printf("Utilizador já registado com esse nome escolha outro\n\n"); fclose(fp); return(registo(Nome, Pass, 0));}
            }
    
    return(registo(Nome, Pass, 1));
    }
    
    
    registo (char Nome[30],char Pass[10], int num) 
    {
    FILE *fp;
    
    
    
    fp = fopen("Regis.txt", "a+");
    if (num ==0) reg();
    if (num ==1) {fprintf(fp, "%s %s  %s\n", Nome, Pass, __DATE__ ); printf("Registo Efectuado com Sucesso\n\n");fclose(fp);menu();}
    }
    
    
    
    menu () 
    {
    printf("****Menu Principal****\n 1-Jogos \n 2- Ficha do Utilizador \n\n");
    
    }
    
    Agradeco a ajuda ;)
     

Partilhar esta Página