Jump to content
Sign in to follow this  
heads_1268

subrair dias

Recommended Posts

heads_1268

boas eu tenho de fazer um programa que me diga quantos dias se passaram entre duas datas ex 13-1-2008  15-1-2008  resposta  2 dias.

eu já fiz isto mas esta a dar erro. claro que ainda falta as validações anos bissextos dias de cada mês etc.

#include <stdio.h>

struct data{

int dia;
int mes;
int ano;

};



struct actualdata{

int dia1;
int mes2;
int ano3;

};

struct dif{

int dif_dia4;
int dif_mes5;
int dif_ano6;

};

int main()
 {
	 struct data data1;
	 struct actualdata data2;
	 struct dif data3;


	 printf("qual e a data de hoje?");
	 scanf("%02d-%02d-%4d",data2.dia1,data2.mes2,data2.ano3);

printf("introduza a data que vosse quer saber os minutos ate hoje");
scanf("%02d-%02d-%4d",data1.dia,data1.mes,data1.ano);

(data1.dia + data2.dia1) = data3.dif_dia4;
data1.mes + data2.mes2 = data3.dif_mes5;
data1.ano + data2.ano3 = data3.dif_ano6;

printf("passaram se %d dias %d meses %d anos");



 }

Share this post


Link to post
Share on other sites
TheDark

Não precisas de criar 3 estruturas, dado que o conteúdo é igual em todas; bastava teres criado a struct data e utilizavas  a mesma para as variáveis data1, data2 e data3;

No último printf não estás a passar os argumentos devidos. Faltam as variáveis cujos valores queres que substituam os %d na string de formatação.

Por último, isto:

	(data1.dia + data2.dia1) = data3.dif_dia4;
data1.mes + data2.mes2 = data3.dif_mes5;
data1.ano + data2.ano3 = data3.dif_ano6;

não é concerteza o que queres fazer. Não tenho a certeza, mas penso que isso nem compila, pelo menos a 1ª linha. Pensa em algo do género data3.dif = data2.dia - data1.dia;


Desaparecido.

Share this post


Link to post
Share on other sites
pmg

O teu professor ainda não te falou do time.h?

#include <time.h>

Se já falou, aconselho-te a usares as funções e estruturas de dados que o time.h declara.

Se não falou ... vais no bom caminho :D

Tenho três pontos para apontar:

1) Não precisas de três estruturas de dados iguais. Podes usar a mesma estrutura para três variáveis diferentes:

struct data {
  int dia;
  int mes;
  int ano;
};

int main(void)
{
  struct data data1;
  struct data data2;
  struct data data3;
  /* ... */
}

2) As tuas contas de somar os dias, meses e anos estão ao contrário. Tens de por no lado esquerdo do igual a variável que vai ser alterada e no lado direito as contas que vão dar o que pretendes

/* usando variáveis da mesma struct data */
data3.dia = data1.dia + data2.dia;
data3.mes = data1.mes + data2.mes;

3) O teu programa, se funcionasse, não calcula o número de dias entre duas datas.

Tens que rever o algoritmo que calcula esse número.

Hint: <número de dias entre duas datas> = <data maior> - <data mais pequena>


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
Njay

Se não for preciso muita precisão, eu convertia as duas datas para o nº de segundos desde 1970, subtraía e dividia o resultado pelo nº de segundos num dia, num mês e num ano.

p.s. É "você" que se escreve.


Blog: Tróniquices ~ Projecto: EmbeddedDreams.com

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.