?
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#define schaltjahr( jahr ) (((jahr)%4 == 0 && (jahr) % 100 != 0 ) || (jahr) % 400 == 0)
int pruefeDatum(int tag, int monat, int jahr);
int leseDatum(int *t, int *m, int *j);
int tage(int t1, int m1, int j1, int t2, int m2, int j2);
void bio(int tage, double *physisch, double *emotionell, double *geistig);
void systemDatum(int *t, int *m, int *j);
void inkrementDatum(int *t, int *m, int *j);
int mTage(int monat, int jahr);
int main()
{
int t=0,m=0,j=0;
int ta=0,ma=0,ja=0;
int *pt=&t,*pm=&m,*pj=&j;
printf("Geben sie ihr Geburtsdatum (tt.mm.jjjj) ein --> ");
leseDatum(pt,pm,pj);
if(pruefeDatum(*pt,*pm,*pj))
{
systemDatum(&ta,&ma,&ja);
tage(*pt,*pm,*pj,ta,ma,ja);
printf("\nWert |physisch |koerperlich |geistig\n");
printf("-------------------------------------------------------------\n");
}
else
printf("Falsches Datum");
return 0;
}
int pruefeDatum(int tag, int monat, int jahr)
{
int tpm[]= {31,28,31,30,31,30,31,31,30,31,30,31};
if( schaltjahr(jahr) )
tpm[1]= 29;
return ( monat > 0 && monat <= 12 && tag > 0 && tag <= tpm[monat - 1]);
}
int leseDatum(int *t, int *m, int *j)
{
return scanf("%d.%d.%d",t,m,j);
}
int tage(int t1, int m1, int j1, int t2, int m2, int j2)
{
int tage;
tage=(j1==j2 && m1==m2)?t2-t1:(mTage(m1,j1)-t1)+t2;
for(m1++; (j1==j2 && m1<m2) || (j1<j2 && m1<13); m1++)
{
tage += mTage(m1, j1);
}
for(m2--; j1<j2 && m2>0; m2--)
{
tage += mTage(m2, j2);
}
for(j1++; j1<j2; j1++)
{
tage += schaltjahr(j1) ? 366 : 365;
}
printf("Sie leben bereits %d Tage",tage);
return tage;
}
void bio(int tage, double *physisch, double *emotionell, double *geistig)
{
}
void inkrementDatum(int *t, int *m, int *j);
void systemDatum(int *t, int *m, int *j)
{
int aktTag()
{
time_t sec;
struct tm *sys;
time(&sec);
sys = localtime(&sec);
return sys->tm_mday;
}
int aktMonat()
{
time_t sec;
struct tm *sys;
time(&sec);
sys = localtime(&sec);
return sys->tm_mon + 1;
}
int aktJahr()
{
time_t sec;
struct tm *sys;
time(&sec);
sys = localtime(&sec);
return sys->tm_year + 1900;
}
}
int mTage(int monat, int jahr)
{
int tag;
switch(monat)
{
case 1: //Jänner
case 3: //März
case 5: //Mai
case 7: //Juli
case 8: //August
case 10: //Oktober
case 12:
tag = 31; //Dezember
break;
case 4: //April
case 6: //Juni
case 9: //September
case 11:
tag = 30; //November
break;
case 2:
if(schaltjahr(jahr))
tag=29;
else
tag=28;
}
return tag;
}
Ich hab es mal formatiert
Habt ihr die Dinge die du hier verwendest in der Schule auch schon durch genommen? Denn ohne es böse zu meinen aber mir scheint du hast viele Dingen in deinem Code selber noch nicht 100% verstanden.
1. Die Verwendung von Pointer solltest du dir nocheinmal anschauen
2. Ich finde es zwar super das du Funktionsprototypen und Funktionen verwendest, aber ein einzelnes scanf() in eine Funktion zu packen ist meiner Meinung unsinnig
3. If + else mit dem ?-Operator zu lösen ist natürlich völlig in Ordnung, aber als Anfänger würde ich dir davon abraten da es meiner Meinung schwerer zu lesen ist.
4. for(j1++; j1<j2; j1++) -> sieh dir nochmals an wie man eine for-Schleife schreibt
5. Funktion systemDatum() ist mir ein kleines Rätsel. In die "unter Funktionen" geht dein Programm nie hinein. Was soll das bewirken bzw. was hast du dir dabei gedacht? Bei den 3 struct Variablen sehe ich den Nutzen auch nicht (abgesehen davon das dein Programm nie zu diesen Variablen kommt).
6. Beim Switch am Ende: Bei den leeren case kommt da noch was oder warum schreibst du sie hin?
Das sind die Sachen was mir ins Auge gefallen sind...
Wäre schön wenn du Dinge kommentierst, damit ein anderer schneller versteht was du vor hast.