Ajuda C++

deepshoot

Power Member
Olá.
Ando farto de procurar pela net fora algo que me ajude a perceber como obter a data pelo próprio sistema e guarda-la numa estrutura através da biblioteca time.h

Tenho a estrutura tm

Código:
/*struct tm{
    int tm_sec; // Segundos, 0-59
    int tm_min; // Minutos, 0-59
    int tm_hour; //Horas 0-23 
    int tm_mday; //dia do mês, 1-31 
    int tm_mon; // mês a partir de janeiro, 0-11 
    int tm_year; // anos a partir de 1900 
    int tm_wday; // dias a partir de domingo, 0-6 
    int tm_yday; // dias a partir de 1 de janeiro 1-365 
    int tm_isdst; // Indicador de horário de verão 
 };*/

/*
struct tm data_agora(){
    struct tm d;
    struct tm *local;
    struct time_tt;
        
    d.tm_mday = local -> tm_mday;
    d.tm_mon = local -> tm_mon + 1;
    d.tm_year = local -> tm_year + 1900;

    return d;
        
};
*/

Alguém dá uma ajuda sff?


Abraço
 
no primeiro link do google pra time.h

Código:
/* ctime example */
#include <stdio.h>
#include <time.h>

int main ()
{
  time_t rawtime;

  time ( &rawtime );
  printf ( "The current local time is: %s", ctime (&rawtime) );
  
  return 0;
}

primeiro obtens o tempo que passou desde 1970 e depois convertes pra algo legível
 
já tinha visto isso, mas precisava de umas luzes mais fortes para meter isto a funcionar :)

Usando esta funçao retirada desse site

Código:
#include <stdio.h>
#include <time.h>

int main ()
{
  time_t seconds;

  seconds = time (NULL);
  printf ("%ld hours since January 1, 1970", seconds/3600);
  
  return 0;
}

Obtenho o erro no visual c++
error C3861: 'time': identifier not found
 
Código:
  time_t rawtime;
  struct tm *timeinfo;

  time (&rawtime);
  timeinfo = localtime(&rawtime);

Usando isso, tens tudo guardado na estrutura como queres. Para acederes é só fazeres timeinfo->tm_year por exemplo.
Se usares uma das funções da time.h não precisas de mudar nada nesses campos. Se quiseres usar uma coisa mais sofisticada como por exemplo o strftime, então já precisas de mudar. Somar 1900 ao ano e 1 ao mês, por exemplo.

Quanto ao teu erro, eu também experimentei no Visual C++ e não houve qualquer problema. Vê como estás a fazer o projecto no VC++. Deves ter feito qualquer coisa mal. Vê se descobres o que foi.

Cumprimentos.
 
Código:
  time_t rawtime;
  struct tm *timeinfo;

  time (&rawtime);
  timeinfo = localtime(&rawtime);
Usando isso, tens tudo guardado na estrutura como queres. Para acederes é só fazeres timeinfo->tm_year por exemplo.
Se usares uma das funções da time.h não precisas de mudar nada nesses campos. Se quiseres usar uma coisa mais sofisticada como por exemplo o strftime, então já precisas de mudar. Somar 1900 ao ano e 1 ao mês, por exemplo.

Quanto ao teu erro, eu também experimentei no Visual C++ e não houve qualquer problema. Vê como estás a fazer o projecto no VC++. Deves ter feito qualquer coisa mal. Vê se descobres o que foi.

Cumprimentos.

Mesmo com o teu exemplo continua a dar-me os mesmos erros:
error C3861: 'time': identifier not found
error C3861: 'localtime': identifier not found

Alguém sabe o que se poderá estar a passar?!

PS: Criei um projecto totalmente novo para experimentar, e dá esses erros :S
 
deepshoot é suposto aquele código que aqui o pessoal forneceu funcionar sem qualquer problema no Visual C++. Outro código mais elaborado poderia não funcionar devido aos seus includes e às respectivas bibliotecas não estarem presentes no sistema. Isto porque o Visual C++ traz apenas o que a Microsoft julga ser o básico para programar.
Mas tal como o blueomega disse, Visual C++ não é o melhor para quem está a aprender a programar. Linux é um ambiente muito melhor na minha opinião para isso. Tens as libs todas que precisas e mais algumas e tens as man pages que te explicam logo tudo sobre uma determinada função ou lib.
Mas se quiseres continuar no Visual C++, já agora vê num directório que há-de ser algo deste género C:\Program Files\Microsoft Visual Studio 9.0\VC\include se tens a time.h lá. Deverias ter. :)
 
Bem assim de repente, Estruturas em c++?!
Não seria mais fácil utilizar objectos?!
É que programar com estruturas em c++, porque não fazer isso logo em c?
Vais ver que se usares objectos isso fica muito mais fácil, além de que pode ser por causa disso que te está a dar erro.
 
deepshoot é suposto aquele código que aqui o pessoal forneceu funcionar sem qualquer problema no Visual C++. Outro código mais elaborado poderia não funcionar devido aos seus includes e às respectivas bibliotecas não estarem presentes no sistema. Isto porque o Visual C++ traz apenas o que a Microsoft julga ser o básico para programar.
Mas tal como o blueomega disse, Visual C++ não é o melhor para quem está a aprender a programar. Linux é um ambiente muito melhor na minha opinião para isso. Tens as libs todas que precisas e mais algumas e tens as man pages que te explicam logo tudo sobre uma determinada função ou lib.
Mas se quiseres continuar no Visual C++, já agora vê num directório que há-de ser algo deste género C:\Program Files\Microsoft Visual Studio 9.0\VC\include se tens a time.h lá. Deverias ter. :)

Olá.
Obrigado pela resposta, no entanto na pasta "include" está lá a time.



cheires disse:
Bem assim de repente, Estruturas em c++?!
Não seria mais fácil utilizar objectos?!
É que programar com estruturas em c++, porque não fazer isso logo em c?
Vais ver que se usares objectos isso fica muito mais fácil, além de que pode ser por causa disso que te está a dar erro.

Infelizmente o objectivo do trabalho é usar estruturas em linguagem c++ :(

Abraço
 
Então vai a Tools -> Options e vê no sítio da minha imagem se tens o que eu tenho. Pelo menos esta $(VCInstallDir)include deverias ter.

 
Então vai a Tools -> Options e vê no sítio da minha imagem se tens o que eu tenho. Pelo menos esta $(VCInstallDir)include deverias ter.


tenho essas 4 que tu tens...já me estou a passar com a função do time...copio e colo, no meu não dá, mas pelo que outros users dizem, no deles funciona...
Vou ter de experimentar noutro PC, não me esteja eu a chatear com isto e seja problema do Pc...
Deixo em anexo o erro que me está a dar agora.
time.jpg


Esse código foi um copy/paste retirado da net.

Abraço e obrigado
 
Última edição:
tenho essas 4 que tu tens...já me estou a passar com a função do time...copio e colo, no meu não dá, mas pelo que outros users dizem, no deles funciona...
Vou ter de experimentar noutro PC, não me esteja eu a chatear com isto e seja problema do Pc...
Deixo em anexo o erro que me está a dar agora.


Esse código foi um copy/paste retirado da net.

Abraço e obrigado

e o compilador esta correcto, não foi inicializada

em c++, apesar de não ser boa pratica podes ter variaveis não inicializadas, em versões mais antigas de c#, acho que idem.

acho que com as flags correctas isso compila, em todo caso é mais correcto inicializar a variavel
 
Back
Topo