Ir ao conteúdo

Posts recomendados

Postado

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
Postado

@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
Postado

 

Cara, muito obrigado!!! Funcionou perfeitamente, e foi a melhor solução que achei.

Não tinha entendido de primeira, mas depois lembrei da ordem do dia, mês. Por isso as atribuições meio esquisitas a primeira vista kkk

 

Muito obrigado Mesmo! 

 

 

 

 

  • Obrigado 1
Postado

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
Postado

@AnsiC Putz cara, eu sou muito iniciante. kkk Fiz correndo e não pensei nisso.

E minha professora vai cobrar códigos bem feito, bem otimizados, etc.

 

Muito obrigado por me atentar disso. Sério mesmo. 

 

 

  • Curtir 1
  • 2 semanas depois...
Postado

@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
Postado

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.

  • Curtir 2
Postado
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
Postado

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
Postado

@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
Postado

@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
Postado

@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 🙂

Postado

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

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!