• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Neo4

Adicionar Data a linha do ficheiro

11 mensagens neste tópico

bem basicamente estou a fazer um programa de logins e registo que depois integrará uma caixa de jogos a desenvolver,

mas preciso que fique guardado no ficheiro dos nomes de utilizador e passwords a data do ultimo log in, data essa que sempre que acedido ao jogo com um log in seria substituida, mas ate agora ainda nao estou a conseguir fazer tal coisa,

a data aparece por cima da data do registo e quando ha mais que 1 utilizador registado faz isso no ultimo da lista. agradeco ajuda

#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 Exit \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");

}


Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas,

Como é que estás a ordernar o texto? É User\nData ou User Data\n;

Aconselho-te a tentares criar um programazeco que te mude um determinado parametro, primeiro uma linha e depois parte de uma linha.

No teu codigo tens isto:

{fprintf(fp,"%s\n",__DATE__); fclose(fp); verifica(0);}

Tenta suprimir a função verifica, fica mais 1337, lol!

Cumps,

PS: O trabalho nao era para entregar já?!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

era e foi entregue mas eu nao fiz grande coisa lol e agora estou a faze-lo para ver s aprendo po recurso pk po exame k vai ser hoje ainda sei pouco  :(

o texto é user pass data de registo \n

e depois do login ficar user pass data de registo data de log in \n

o problema é a data ser por exemplo jun 27 2007 quando mando escrever a data do log in ele escreve por cima do 27 e por ai adiante... =/

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu vi assim a pressa, mas pelo k me parece,

fprintf(fp,"%s\n",__DATE__)

experimenta por

fprintf(fp,"%s %s %s\n",Name, Pass, __DATE__)

axo k ele assim funciona n me lembro, eu sei k tb tive problemas na substituiçao de dados, por isso preferi copiar os dados k me interessavam para um ficheiro temporario, modificando o valor, dps apagava o original e mudava o nome ao outro.

comia mais recursos, mas isto tb n e um projecto de mestrado, e de primeiro ano.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois eu tambem tentei fazer o mesmo mas o problema é que ja la tem uma data que é a do registo e usando esse metodo um %s corresponde por exemplo a Jun outro ao dia etc..

para perceberes melhor talvez seja melhor copiares o codigo e compilar e ja ves.

ainda nao tentei foi por um %s para cada string da data e por depois 3x Data nos parametros a escrever. vou tentar isso.

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pois e isso mesmo, tive a ver o meu codigo e e isso, para cada elemento poe um %s, e dps basta substituires os k keres, ele assim funca k eu pelo menos tenho assim ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

int login() 
{

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

fp= fopen("Regis.txt", "w+");

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 %s %s %s %s %s\n",Name, Password, Data, __DATE__); fclose(fp); verifica(0);}
		        }

	}

tentei isto mas continua a nao dar direito escreve lixo no ficheiro e umas coisas em cima de outras

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

fazemos assim, eu agora n tenho mt tempo para ver o codigo, karta dps do exame de logica vejo bem isso, deve estar a falhar-me kk coisa. pode ser??

fica bem, mas axo k ja sei pk n da, e s for e facil de resolver

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Neo4 experimenta algo como:

Funções para a data:

int cria_data(void)
{
time_t data = time(NULL);
struct tm * t = localtime(&data);

	// A partir da definição da estrutura tm obtém-se os dados que interessam e combina-se Matematicamente

return (((t->tm_year % 100) * 100 + (1+ t->tm_mon))* 100 +t->tm_mday);
}

void converte_data(char sdata[20], int idata)
{
int dia, mes, ano;
ano = idata / 10000;
mes = idata % 10000 / 100;
dia = idata %   100;

sprintf(sdata,"%02d/%02d/%02d",dia,mes,ano);
}

Ficheiro

int i;
int X;
char data[20]; 
FILE * txt; 

txt = fopen("Users.txt","w");

          for(X=0;X<=ultimo_User;X++) // Ciclo que vai correr desde X=0 a Z menor ou igual ao último user, incrementando sempre + 1 à variável X
	{
		converte_data(data,c[X].data_login);
		fprintf(txt,"%s\n",data); // Escreve a data do login no ficheiro
  	                fclose (txt); // Fecha o ficheiro cartao.txt
                }
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

para que é isso tudo da data?

isso é muito à frente para o meu nivel lol =p

por acaso estou a pensar resolver o problema recorrendo a structs para escrita de ficheiros ... vou tratar disso esta semana

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora