Ir ao conteúdo
  • Cadastre-se

C Como salvar a data atual, em um arquivo .txt na linguagem C?


nilzon

Posts recomendados

Estou fazendo um projeto acadêmico, e em um momento, preciso salvar informações em um arquivo .txt

            fprintf(file, "Dia da semana: %d \n", cardapio->info.dia_semana);
            fputs("Salada: ", file);
            fputs(cardapio->info.salada, file);
            fprintf(file, "\n");
            fputs("Prato Principal: ", file);
            fputs(cardapio->info.prato_principal, file);
            fprintf(file, "\n");
            fputs("Opção Vegetariana: ", file);
            fputs(cardapio->info.opc_vegetariana, file);
            fprintf(file, "\n");
            fputs("Guarnição: ", file);
            fputs(cardapio->info.guarnicao, file);
            fprintf(file, "\n");
            //fputs((system("date \t")), file);

reparem que na ultima linha, (comentado) eu tentei essa "marotagem" rs.

Gostaria de salvar a data atual em um arquivo .txt, junto com os demais dados. Obrigado!

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@nilzon    você pode pegar a data atual usando essa função aqui e para isso você precisa colocar uma variável char com nove posições pois são oito dígitos e mais um para o caractere nulo  '\0'   , então seria assim :

#include <time.h>
#include <stdio.h>

/*// pega a data e hora atual e imprime na tela*/
int main()
{
	char dateStr[9];
	char timeStr[9];

	/*// pega a data atual*/
	_strdate( dateStr);
	printf( "The current date is %s \n", dateStr);

	/*// pega a hora atual*/
	_strtime( timeStr );
	printf( "The current time is %s \n", timeStr);

	char dia[5]={dateStr[3],dateStr[4]};
	char mes[5]={dateStr[0],dateStr[1]};
	char ano[5]={dateStr[6],dateStr[7]};
	printf("A Data Em Portugues --> %s/%s/20%s",dia,mes,ano);
	getchar();
	return 0;
}

aí você tem também a hora atual , e salve no arquivo normalmente como você fez no seu código .

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Olá, tudo certo!

Então ...

 

Como mais que metade da entrada de dados humana, dou também para o individuo humano à responsabilidade pela data atual, quero dizer, se o digitador não erra com os dados anteriores também é lógico que não errará com data atual que representa da lista; o dado mais obvio de todos (se bem que tem alguns pessoas que esquecem a data até do aniversário Quiçá atual).

 

Podemos também economizar linhas do projeto, removendo sua redundância; redundância essa que está presento no uso das funções fputs em seguida fprintf se não existe semântica por trás dessa declaração, fundir representa entendimento de uma delas.

Ex.:

/*  Essa declaração: fputs segindo de um fprintf */

	fputs("Salada: ", file);
	fputs(cardapio->info.salada, file);
	fprintf(file, "\n");

/*  é análogo a */
	
	fprintf( file, "Salada: %s\n", cardapio->info.salada );

 

 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

@devair1010 Cara, tempo passou, e agora mexendo no código, nao entendi essa parte do código, e o porque dos vetores, terem tamanho 5.

 

	_strtime( timeStr );
	printf( "The current time is %s \n", timeStr);

	char dia[5]={dateStr[3],dateStr[4]};
	char mes[5]={dateStr[0],dateStr[1]};
	char ano[5]={dateStr[6],dateStr[7]};

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

2 minutos atrás, isrnick disse:

A parte do _strtime é desnecessária para o seu programa, isso é para ver a hora atual.

 

E os vetores poderiam ter tamanho 3, para armazenar os 2 caracteres da data mais o caractere nulo indicando o fim da string. Não precisa ter tamanho 5.

Até no vetor do ano eu posso deixar tamanho 3, para 2 caracteres ? ou ano deve ser tamanho 5 mesmo?

( Eu vejo que o vetor ano, recebe apenas dois caracteres, mas, nao custa perguntar kkk )

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Como pode ver quando imprime dateStr a função _strdate() fornece uma data no formato "mm/dd/yy" com apenas 2 dígitos para o ano. Mas se você quiser pode colocar os caracteres '2' e '0' você mesmo e usar 5 caracteres.

 

Vale notar que _strdate() e _strtime() não são funções padrões da linguagem C.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@nilzon    o que o @isrnick   disse está certo ,  esses vetores precisam apenas de 3 posições mesmo , e mais uma coisa que não tinha observado antes é que normalmente precisa colocar o  '\0'  no final do vetor para imprimir a string , mas nesse código esqueci de colocar , e mesmo assim está funcionando certo  ,  então deveria ser assim  :

char dia[3]={dateStr[3],dateStr[4]};dia[2]='\0';/* aqui pega os caract  do dia */
char mes[3]={dateStr[0],dateStr[1]};mes[2]='\0';/* aqui pega os caract  do mes */
char ano[3]={dateStr[6],dateStr[7]};ano[2]='\0';/* aqui pega os caract  do ano */

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@devair1010 Assim acho que fica mais descritivo:

char dia[3]={dateStr[3], dateStr[4], '\0'};
char mes[3]={dateStr[0], dateStr[1], '\0'};
char ano[3]={dateStr[6], dateStr[7], '\0'};

 

 

adicionado 13 minutos depois

@nilzon Postei um tempo atrás em outro tópico uma maneira de obter a data atual usando recursos padrão da linguagem:

 

Em 10/05/2018 às 20:51, isrnick disse:

Inclua:


#include <time.h>

e use:


int diaatual, mesatual, anoatual;
time_t agora_segundos = time(NULL);
struct tm *agora = localtime(&agora_segundos);
diaatual = agora->tm_mday;
mesatual = agora->tm_mon + 1;
anoatual = agora->tm_year + 1900;

time() para obter o tempo que passou em segundos dês do início da "Era Unix".

localtime() para converter para data e hora locais no formato da struct tm (http://en.cppreference.com/w/c/chrono/tm).

 

 

Aqui obtém no formato de números inteiros, não de string.

  • Obrigado 2
Link para o comentário
Compartilhar em outros sites

@isrnick Olá. Vou participar da brincadeira também, té porque me interessa isso

Com respeito a pegar a hora e data atual do sistema, gosto mais de ajustar o resultado de acordo com o formato que quero (hora e data formatada)

Segue um exemplo:

#include <stdio.h>
#include <time.h>

int main(void) {

    time_t now;
    struct tm *the_time;
    char result[35];

    time(&now);
    the_time = localtime(&now);
    strftime(result, sizeof(result), " %H:%M:%S\n\t%d/%m/%Y", the_time);
    printf("\n\t%s\n", result);

    return 0;
}

Com relação a maneira como você está fazendo, nessa parte:

time_t agora_segundos = time(NULL);

eu também fazia assim, mas apenas para aprender resolvi criar um código parecido no notepad++, e, para minha surpresa, dava um warning nessa parte. Até agora tô em dúvida de qual maneira é mais eficaz, mas, dessa forma como fiz acima não é preciso incluir o arquivo de cabeçalho <stdlib.h> para a macro NULL e o resultado é o mesmo 🙂

Link para o comentário
Compartilhar em outros sites

Olá, tudo certo!?

Então ...

 

Tudo parece está resolvido, só um detalhe que passou. Por que está funcionando certo? Porque quando iniciamos um vetor e sobram elementos na inicialização esses são preenchidos por 0. É trivial que '\0' é igual a 0. E nesse caso e em todos os outros não precisa.

 

 

9 horas atrás, devair1010 disse:

não tinha observado antes é que normalmente precisa colocar o  '\0'  no final do vetor para imprimir a string , mas nesse código esqueci de colocar , e mesmo assim está funcionando certo  ,  então deveria ser assim  :

 

 

 

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...