Variable nicht initialisiert < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 17:45 Sa 15.12.2012 | Autor: | Mija |
Aufgabe | Schreiben Sie ein C-Programm, das das Alter des Benutzers in Tagen berechnet und auf die Konsole ausgibt. Dabei soll der Benutzer sein Geburtsdatum und das aktuelle Datum über die Tastatur eingeben. Und wenn das funktioniert, lassen Sie Ihr Programm das Alter auch in Stunden, Minuten und Sekunden ausrechnen und ausgeben.
Tipp: Schreiben Sie eine Funktion anzahlTageBisDatum(), die die Anzahl der Tage in einem Jahr bis zu einem konkreten Datum in diesem Jahr berechnet. Das Datum übergeben Sie der Funktion als Parameter. |
Hallo, ich habe das obenstehende Programm zunächst für die Berechnung der Tage geschrieben.
Nachdem ich allerdings alle Daten richtig eingegeben habe, kommt die Fehlermeldung
"Debug Error! Run-Time Check Failure #3 - The Variable 'tageGanzesJahr' is being used without being initialized."
Wo ist mein Fehler?
(Ich weiß, man könnte sicher das Programm noch um einiges verkürzen. Allerdings haben wir noch nicht soviel behandelt)
Hier ist mein Code:
/* Wie alt bin ich? */
#include <stdio.h>
//Funktionsdeklarationen
int schaltjahr(int);
int monatUngerade(int);
int tageGanzesJahrBerechnen(int,int);
int anzahlTageBisDatum(int,int);
int anzahlTageBisEnde(int,int);
//Funktionsdefinitionen
//prüft, ob das betreffende Jahr ein Schaltjahr ist oder nicht
int schaltjahr(int jahr)
{
if ( jahr % 4 == 0 && jahr % 100 != 0 || jahr % 400 == 0 )
return 1;
else
return 0;
}
//Prüfen, ob der Monat ungerade ist (also Monat 01, 03, 05 usw.)
int monatUngerade(int gmonat)
{
if (gmonat % 2 != 0)
{
return 1;
}
else
{
return 0;
}
}
//Jahre zwischen Geburtsjahr und aktuelles Jahr betrachten und dessen Tage zusammenzählen
int tageGanzesJahrBerechnen(int gjahr, int hjahr)
{
int tageGanzesJahr;
while ( gjahr < hjahr )
{
if (schaltjahr(gjahr+1)) // wir wollen das Jahr nach dem Geburtsjahr betrachten, denn das Geburtsjahr ist ja schon abgehandelt
{
tageGanzesJahr = tageGanzesJahr + 366;
}
else
{
tageGanzesJahr = tageGanzesJahr + 365;
}
gjahr++;
}
return tageGanzesJahr;
}
int anzahlTageBisDatum(int htag, int hmonat, int hjahr)
{
int jan = 31; int feb = 0; int maerz = 31; int apr = 30; int mai = 31; int juni = 30;
int juli = 31; int aug = 31; int sep = 30; int okt = 31; int nov = 30; int dez = 31;
int volleMonate;
if (schaltjahr(hjahr)) // aktuelles Jahr ist ein Schaltjahr
{
feb = 29;
if (hmonat = 1)
{
volleMonate = 0;
}
else if (hmonat = 2)
{
volleMonate = jan;
}
else if (hmonat = 3)
{
volleMonate = jan + feb;
}
else if (hmonat = 4)
{
volleMonate = jan + feb + maerz;
}
else if (hmonat = 5)
{
volleMonate = jan + feb + maerz + apr;
}
else if (hmonat = 6)
{
volleMonate = jan + feb + maerz + apr + mai;
}
else if (hmonat = 7)
{
volleMonate = jan + feb + maerz + apr + juni;
}
else if (hmonat = 8)
{
volleMonate = jan + feb + maerz + apr + juni + juli;
}
else if (hmonat = 9)
{
volleMonate = jan + feb + maerz + apr + juni + juli + aug;
}
else if (hmonat = 10)
{
volleMonate = jan + feb + maerz + apr + juni + juli + aug + sep;
}
else if (hmonat = 11)
{
volleMonate = jan + feb + maerz + apr + juni + juli + aug + sep + okt;
}
else if (hmonat = 12)
{
volleMonate = jan + feb + maerz + apr + juni + juli + aug + sep + okt + nov;
}
}
else // aktuelles Jahr ist kein Schaltjahr
{
feb = 28;
if (hmonat = 1)
{
volleMonate = 0;
}
else if (hmonat = 2)
{
volleMonate = jan;
}
else if (hmonat = 3)
{
volleMonate = jan + feb;
}
else if (hmonat = 4)
{
volleMonate = jan + feb + maerz;
}
else if (hmonat = 5)
{
volleMonate = jan + feb + maerz + apr;
}
else if (hmonat = 6)
{
volleMonate = jan + feb + maerz + apr + mai;
}
else if (hmonat = 7)
{
volleMonate = jan + feb + maerz + apr + juni;
}
else if (hmonat = 8)
{
volleMonate = jan + feb + maerz + apr + juni + juli;
}
else if (hmonat = 9)
{
volleMonate = jan + feb + maerz + apr + juni + juli + aug;
}
else if (hmonat = 10)
{
volleMonate = jan + feb + maerz + apr + juni + juli + aug + sep;
}
else if (hmonat = 11)
{
volleMonate = jan + feb + maerz + apr + juni + juli + aug + sep + okt;
}
else if (hmonat = 12)
{
volleMonate = jan + feb + maerz + apr + juni + juli + aug + sep + okt + nov;
}
}
return volleMonate + htag;
}
int anzahlTageBisEnde(int gtag, int gmonat, int gjahr)
{
int jan = 31; int feb = 0; int maerz = 31; int apr = 30; int mai = 31; int juni = 30;
int juli = 31; int aug = 31; int sep = 30; int okt = 31; int nov = 30; int dez = 31;
int diffMonat;
int summeTage;
int diffTage;
if (gmonat<3)
{
if (schaltjahr(gjahr))
{
feb = 29;
}
else
{
feb = 28;
}
}
//ganze Monate zusammenrechnen
diffMonat = 12 - gmonat;
if (diffMonat = 11)
{
summeTage = dez + nov + okt + sep + aug + juli + juni + mai + apr + maerz + feb;
}
else if (diffMonat = 10)
{
summeTage = dez + nov + okt + sep + aug + juli + juni + mai + apr + maerz;
}
else if (diffMonat = 9)
{
summeTage = dez + nov + okt + sep + aug + juli + juni + mai + apr;
}
else if (diffMonat = 8)
{
summeTage = dez + nov + okt + sep + aug + juli + juni + mai;
}
else if (diffMonat = 7)
{
summeTage = dez + nov + okt + sep + aug + juli + juni;
}
else if (diffMonat = 6)
{
summeTage = dez + nov + okt + sep + aug + juli;
}
else if (diffMonat = 5)
{
summeTage = dez + nov + okt + sep + aug;
}
else if (diffMonat = 4)
{
summeTage = dez + nov + okt + sep;
}
else if (diffMonat = 3)
{
summeTage = dez + nov + okt;
}
else if (diffMonat = 2)
{
summeTage = dez + nov;
}
else if (diffMonat = 1)
{
summeTage = dez;
}
else
{
summeTage = 0;
}
//ganze Tage zusammenrechnen
if ( ( gmonat<8 && monatUngerade(gmonat) ) || ( gmonat >=8 && !monatUngerade(gmonat) ) )
{
diffTage = 31 - gtag;
}
else if ( ( gmonat!=2 && gmonat<8 && !monatUngerade(gmonat) ) || ( gmonat >= 8 && monatUngerade(gmonat) ) )
{
diffTage = 30 - gtag;
}
else if (gmonat = 2 && schaltjahr(gjahr))
{
diffTage = 29 - gtag;
}
else // also if (gmonat = 1 && schaltjahr(gjahr)=FALSE)
{
diffTage = 28 - gtag;
}
return summeTage + diffTage;
}
//Main-Programm
int main(void)
{
int gtag; int gmonat; int gjahr;
int htag; int hmonat; int hjahr;
int tageGeburtsjahr; int tageAktuellesJahr; int tageGanzesJahr; int tageInsgesamt;
//Eingabe Geburtsdatum
printf("Bitte geben Sie Ihr Geburtsdatum [mm] ein!\n");
[/mm]
printf("Tag: ");
scanf("%d", >ag);
printf("Monat: ");
scanf("%d", &gmonat);
printf("Jahr: ");
scanf("%d", &gjahr);
//Eingabe aktuelles Datum
[mm] printf("\nBitte [/mm] geben Sie das heutige Datum [mm] ein!\n");
[/mm]
printf("Tag: ");
scanf("%d", &htag);
printf("Monat: ");
scanf("%d", &hmonat);
printf("Jahr: ");
scanf("%d", &hjahr);
while ( gtag<1 || gmonat<1 || gjahr<1 || gtag>31
|| ( gmonat=2 && gtag>29 && schaltjahr(gtag) ) || ( gmonat=2 && gtag>28 && !schaltjahr(gtag) )
|| ( ( gtag>30 && gmonat!=2 && gmonat<8 && !monatUngerade(gmonat) ) || ( gtag>30 && gmonat >= 8 && monatUngerade(gmonat) ) )
|| htag<1 || hmonat<1 || hjahr<1 || htag>31
|| ( gmonat=2 && gtag>29 && schaltjahr(gtag) ) || ( gmonat=2 && gtag>28 && !schaltjahr(gtag) )
|| ( ( gtag>30 && gmonat!=2 && gmonat<8 && !monatUngerade(gmonat) ) || ( gtag>30 && gmonat >= 8 && monatUngerade(gmonat) ) )
)
{
[mm] printf("\nGeben [/mm] Sie ein gueltiges Datum [mm] ein!\n\n");
[/mm]
//Eingabe Geburtsdatum
printf("Bitte geben Sie Ihr Geburtsdatum [mm] ein!\n");
[/mm]
printf("Tag: ");
scanf("%d", >ag);
printf("Monat: ");
scanf("%d", &gmonat);
printf("Jahr: ");
scanf("%d", &gjahr);
//Eingabe aktuelles Datum
[mm] printf("\nBitte [/mm] geben Sie das heutige Datum [mm] ein!\n");
[/mm]
printf("Tag: ");
scanf("%d", &htag);
printf("Monat: ");
scanf("%d", &hmonat);
printf("Jahr: ");
scanf("%d", &hjahr);
}
while ( (hjahr<gjahr) || (hjahr=gjahr && hmonat<gmonat) || ( ( (hjahr=gjahr) && (hmonat=gmonat) ) && htag<=gtag ) )
{
[mm] printf("\nDas [/mm] Geburtsdatum muss vor dem Enddatum [mm] liegen!\n\n");
[/mm]
//Eingabe Geburtsdatum
printf("Bitte geben Sie Ihr Geburtsdatum [mm] ein!\n");
[/mm]
printf("Tag: ");
scanf("%d", >ag);
printf("Monat: ");
scanf("%d", &gmonat);
printf("Jahr: ");
scanf("%d", &gjahr);
//Eingabe aktuelles Datum
[mm] printf("\nBitte [/mm] geben Sie das heutige Datum [mm] ein!\n");
[/mm]
printf("Tag: ");
scanf("%d", &htag);
printf("Monat: ");
scanf("%d", &hmonat);
printf("Jahr: ");
scanf("%d", &hjahr);
}
tageGeburtsjahr = anzahlTageBisEnde(gtag, gmonat, gjahr);
tageAktuellesJahr = anzahlTageBisDatum(htag, hmonat, hjahr);
tageGanzesJahr = tageGanzesJahrBerechnen(gjahr, hjahr);
tageInsgesamt = tageGeburtsjahr + tageGanzesJahr + tageAktuellesJahr;
printf("Sie sind %d Jahre [mm] alt!\n\n\n", [/mm] tageInsgesamt);
return 0;
}
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 18:14 Sa 15.12.2012 | Autor: | link963 |
Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
> Schreiben Sie ein C-Programm, das das Alter des Benutzers
> in Tagen berechnet und auf die Konsole ausgibt. Dabei soll
> der Benutzer sein Geburtsdatum und das aktuelle Datum über
> die Tastatur eingeben. Und wenn das funktioniert, lassen
> Sie Ihr Programm das Alter auch in Stunden, Minuten und
> Sekunden ausrechnen und ausgeben.
> Tipp: Schreiben Sie eine Funktion anzahlTageBisDatum(),
> die die Anzahl der Tage in einem Jahr bis zu einem
> konkreten Datum in diesem Jahr berechnet. Das Datum
> übergeben Sie der Funktion als Parameter.
> Hallo, ich habe das obenstehende Programm zunächst für
> die Berechnung der Tage geschrieben.
>
> Nachdem ich allerdings alle Daten richtig eingegeben habe,
> kommt die Fehlermeldung
> "Debug Error! Run-Time Check Failure #3 - The Variable
> 'tageGanzesJahr' is being used without being initialized."
>
> Wo ist mein Fehler?
>
> (Ich weiß, man könnte sicher das Programm noch um einiges
> verkürzen. Allerdings haben wir noch nicht soviel
> behandelt)
>
> Hier ist mein Code:
>
> /* Wie alt bin ich? */
>
> #include <stdio.h>
>
> //Funktionsdeklarationen
> int schaltjahr(int);
> int monatUngerade(int);
> int tageGanzesJahrBerechnen(int,int);
> int anzahlTageBisDatum(int,int);
> int anzahlTageBisEnde(int,int);
>
> //Funktionsdefinitionen
>
> //prüft, ob das betreffende Jahr ein Schaltjahr ist oder
> nicht
> int schaltjahr(int jahr)
> {
> if ( jahr % 4 == 0 && jahr % 100 != 0 || jahr % 400 == 0
> )
> return 1;
> else
> return 0;
> }
>
> //Prüfen, ob der Monat ungerade ist (also Monat 01, 03, 05
> usw.)
> int monatUngerade(int gmonat)
> {
> if (gmonat % 2 != 0)
> {
> return 1;
> }
> else
> {
> return 0;
> }
> }
>
> //Jahre zwischen Geburtsjahr und aktuelles Jahr betrachten
> und dessen Tage zusammenzählen
> int tageGanzesJahrBerechnen(int gjahr, int hjahr)
> {
> int tageGanzesJahr;
>
> while ( gjahr < hjahr )
> {
> if (schaltjahr(gjahr+1)) // wir wollen das Jahr nach dem
> Geburtsjahr betrachten, denn das Geburtsjahr ist ja schon
> abgehandelt
> {
> tageGanzesJahr = tageGanzesJahr + 366;
> }
> else
> {
> tageGanzesJahr = tageGanzesJahr + 365;
> }
> gjahr++;
> }
>
> return tageGanzesJahr;
> }
Hier steckt ein kleiner Fehler. Du musst der Variable vor der Schleife einen Wert zuweisen, sonst kann dein Compiler im ersten Durchlauf nicht damit rechnen.
>
>
> int anzahlTageBisDatum(int htag, int hmonat, int hjahr)
> {
> int jan = 31; int feb = 0; int maerz = 31; int apr = 30;
> int mai = 31; int juni = 30;
> int juli = 31; int aug = 31; int sep = 30; int okt = 31;
> int nov = 30; int dez = 31;
> int volleMonate;
>
> if (schaltjahr(hjahr)) // aktuelles Jahr ist ein
> Schaltjahr
> {
> feb = 29;
>
> if (hmonat = 1)
> {
> volleMonate = 0;
> }
> else if (hmonat = 2)
> {
> volleMonate = jan;
> }
> else if (hmonat = 3)
> {
> volleMonate = jan + feb;
> }
> else if (hmonat = 4)
> {
> volleMonate = jan + feb + maerz;
> }
> else if (hmonat = 5)
> {
> volleMonate = jan + feb + maerz + apr;
> }
> else if (hmonat = 6)
> {
> volleMonate = jan + feb + maerz + apr + mai;
> }
> else if (hmonat = 7)
> {
> volleMonate = jan + feb + maerz + apr + juni;
> }
> else if (hmonat = 8)
> {
> volleMonate = jan + feb + maerz + apr + juni + juli;
> }
> else if (hmonat = 9)
> {
> volleMonate = jan + feb + maerz + apr + juni + juli +
> aug;
> }
> else if (hmonat = 10)
> {
> volleMonate = jan + feb + maerz + apr + juni + juli +
> aug + sep;
> }
> else if (hmonat = 11)
> {
> volleMonate = jan + feb + maerz + apr + juni + juli +
> aug + sep + okt;
> }
> else if (hmonat = 12)
> {
> volleMonate = jan + feb + maerz + apr + juni + juli +
> aug + sep + okt + nov;
> }
> }
> else // aktuelles Jahr ist kein Schaltjahr
> {
> feb = 28;
>
> if (hmonat = 1)
> {
> volleMonate = 0;
> }
> else if (hmonat = 2)
> {
> volleMonate = jan;
> }
> else if (hmonat = 3)
> {
> volleMonate = jan + feb;
> }
> else if (hmonat = 4)
> {
> volleMonate = jan + feb + maerz;
> }
> else if (hmonat = 5)
> {
> volleMonate = jan + feb + maerz + apr;
> }
> else if (hmonat = 6)
> {
> volleMonate = jan + feb + maerz + apr + mai;
> }
> else if (hmonat = 7)
> {
> volleMonate = jan + feb + maerz + apr + juni;
> }
> else if (hmonat = 8)
> {
> volleMonate = jan + feb + maerz + apr + juni + juli;
> }
> else if (hmonat = 9)
> {
> volleMonate = jan + feb + maerz + apr + juni + juli +
> aug;
> }
> else if (hmonat = 10)
> {
> volleMonate = jan + feb + maerz + apr + juni + juli +
> aug + sep;
> }
> else if (hmonat = 11)
> {
> volleMonate = jan + feb + maerz + apr + juni + juli +
> aug + sep + okt;
> }
> else if (hmonat = 12)
> {
> volleMonate = jan + feb + maerz + apr + juni + juli +
> aug + sep + okt + nov;
> }
> }
>
> return volleMonate + htag;
>
> }
>
> int anzahlTageBisEnde(int gtag, int gmonat, int gjahr)
> {
> int jan = 31; int feb = 0; int maerz = 31; int apr = 30;
> int mai = 31; int juni = 30;
> int juli = 31; int aug = 31; int sep = 30; int okt = 31;
> int nov = 30; int dez = 31;
> int diffMonat;
> int summeTage;
> int diffTage;
>
> if (gmonat<3)
> {
> if (schaltjahr(gjahr))
> {
> feb = 29;
> }
> else
> {
> feb = 28;
> }
> }
>
> //ganze Monate zusammenrechnen
>
> diffMonat = 12 - gmonat;
>
> if (diffMonat = 11)
> {
> summeTage = dez + nov + okt + sep + aug + juli + juni +
> mai + apr + maerz + feb;
> }
> else if (diffMonat = 10)
> {
> summeTage = dez + nov + okt + sep + aug + juli + juni +
> mai + apr + maerz;
> }
> else if (diffMonat = 9)
> {
> summeTage = dez + nov + okt + sep + aug + juli + juni +
> mai + apr;
> }
> else if (diffMonat = 8)
> {
> summeTage = dez + nov + okt + sep + aug + juli + juni +
> mai;
> }
> else if (diffMonat = 7)
> {
> summeTage = dez + nov + okt + sep + aug + juli + juni;
> }
> else if (diffMonat = 6)
> {
> summeTage = dez + nov + okt + sep + aug + juli;
> }
> else if (diffMonat = 5)
> {
> summeTage = dez + nov + okt + sep + aug;
> }
> else if (diffMonat = 4)
> {
> summeTage = dez + nov + okt + sep;
> }
> else if (diffMonat = 3)
> {
> summeTage = dez + nov + okt;
> }
> else if (diffMonat = 2)
> {
> summeTage = dez + nov;
> }
> else if (diffMonat = 1)
> {
> summeTage = dez;
> }
> else
> {
> summeTage = 0;
> }
>
> //ganze Tage zusammenrechnen
>
> if ( ( gmonat<8 && monatUngerade(gmonat) ) || ( gmonat >=8
> && !monatUngerade(gmonat) ) )
> {
> diffTage = 31 - gtag;
> }
> else if ( ( gmonat!=2 && gmonat<8 &&
> !monatUngerade(gmonat) ) || ( gmonat >= 8 &&
> monatUngerade(gmonat) ) )
> {
> diffTage = 30 - gtag;
> }
> else if (gmonat = 2 && schaltjahr(gjahr))
> {
> diffTage = 29 - gtag;
> }
> else // also if (gmonat = 1 && schaltjahr(gjahr)=FALSE)
> {
> diffTage = 28 - gtag;
> }
>
> return summeTage + diffTage;
> }
>
> //Main-Programm
> int main(void)
> {
> int gtag; int gmonat; int gjahr;
> int htag; int hmonat; int hjahr;
> int tageGeburtsjahr; int tageAktuellesJahr; int
> tageGanzesJahr; int tageInsgesamt;
>
> //Eingabe Geburtsdatum
> printf("Bitte geben Sie Ihr Geburtsdatum [mm]ein!\n");[/mm]
> printf("Tag: ");
> scanf("%d", >ag);
> printf("Monat: ");
> scanf("%d", &gmonat);
> printf("Jahr: ");
> scanf("%d", &gjahr);
>
> //Eingabe aktuelles Datum
> [mm] printf("\nBitte[/mm] geben Sie das heutige Datum [mm]ein!\n");[/mm]Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
> printf("Tag: ");
> scanf("%d", &htag);
> printf("Monat: ");
> scanf("%d", &hmonat);
> printf("Jahr: ");
> scanf("%d", &hjahr);
>
> while ( gtag<1 || gmonat<1 || gjahr<1 || gtag>31
> || ( gmonat=2 && gtag>29 && schaltjahr(gtag) ) || (
> gmonat=2 && gtag>28 && !schaltjahr(gtag) )
> || ( ( gtag>30 && gmonat!=2 && gmonat<8 &&
> !monatUngerade(gmonat) ) || ( gtag>30 && gmonat >= 8 &&
> monatUngerade(gmonat) ) )
> || htag<1 || hmonat<1 || hjahr<1 || htag>31
> || ( gmonat=2 && gtag>29 && schaltjahr(gtag) ) || (
> gmonat=2 && gtag>28 && !schaltjahr(gtag) )
> || ( ( gtag>30 && gmonat!=2 && gmonat<8 &&
> !monatUngerade(gmonat) ) || ( gtag>30 && gmonat >= 8 &&
> monatUngerade(gmonat) ) )
> )
> {
> [mm] printf("\nGeben[/mm] Sie ein gueltiges Datum [mm]ein!\n\n");[/mm]
>
> //Eingabe Geburtsdatum
> printf("Bitte geben Sie Ihr Geburtsdatum [mm]ein!\n");[/mm]
> printf("Tag: ");
> scanf("%d", >ag);
> printf("Monat: ");
> scanf("%d", &gmonat);
> printf("Jahr: ");
> scanf("%d", &gjahr);
>
> //Eingabe aktuelles Datum
> [mm] printf("\nBitte[/mm] geben Sie das heutige Datum [mm]ein!\n");[/mm]Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
> printf("Tag: ");
> scanf("%d", &htag);
> printf("Monat: ");
> scanf("%d", &hmonat);
> printf("Jahr: ");
> scanf("%d", &hjahr);
> }
>
> while ( (hjahr<gjahr) || (hjahr=gjahr && hmonat<gmonat) ||
> ( ( (hjahr=gjahr) && (hmonat=gmonat) ) && htag<=gtag ) )
> {
> [mm] printf("\nDas[/mm] Geburtsdatum muss vor dem Enddatum
> [mm]liegen!\n\n");[/mm]
>
> //Eingabe Geburtsdatum
> printf("Bitte geben Sie Ihr Geburtsdatum [mm]ein!\n");[/mm]
> printf("Tag: ");
> scanf("%d", >ag);
> printf("Monat: ");
> scanf("%d", &gmonat);
> printf("Jahr: ");
> scanf("%d", &gjahr);
>
> //Eingabe aktuelles Datum
> [mm] printf("\nBitte[/mm] geben Sie das heutige Datum [mm]ein!\n");[/mm]Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
> printf("Tag: ");
> scanf("%d", &htag);
> printf("Monat: ");
> scanf("%d", &hmonat);
> printf("Jahr: ");
> scanf("%d", &hjahr);
> }
>
> tageGeburtsjahr = anzahlTageBisEnde(gtag, gmonat, gjahr);
> tageAktuellesJahr = anzahlTageBisDatum(htag, hmonat,
> hjahr);
> tageGanzesJahr = tageGanzesJahrBerechnen(gjahr, hjahr);
>
> tageInsgesamt = tageGeburtsjahr + tageGanzesJahr +
> tageAktuellesJahr;
>
> printf("Sie sind %d Jahre [mm]alt!\n\n\n",[/mm]Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
tageInsgesamt);
>
> return 0;
> }
Grüße link963
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 18:48 Sa 15.12.2012 | Autor: | Mija |
Vielen Dank, nun wird schonmal etwas ausgegeben :D
Allerdings habe ich nun das Problem, dass immer nur etwas über ein Jahr, also z.B. 378 Tage ausgegeben werden, egal welches Geburtsdatum ich nehme.
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 19:43 Sa 15.12.2012 | Autor: | link963 |
Kommt auch ein Wert über 365/366 raus, wenn Geburtsjahr und Datumsjahr gleich sind? Wie hast du die Variable "tageGanzesJahr" initialisiert ?
Grüße link963
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 19:48 Sa 15.12.2012 | Autor: | Mija |
Wenn ich z.B. den 2.9.2012 als Geburtsdatum nehme und den 15.12.2012 als aktuelles Datum, dann komme über 365/366.
Wenn ich aber z.B. den 28.3.2012 als Geburtsdatum nehme, dann komme ich drunter.
Die Variable tageGanzesJahr ist bei mir zunächst 0 und läuft dann durch die untenstehende while-Schleife:
//Jahre zwischen Geburtsjahr und aktuelles Jahr betrachten und dessen Tage zusammenzählen
int tageGanzesJahrBerechnen(int gjahr, int hjahr)
{
int tageGanzesJahr=0;
int jahrNachGeburt = gjahr + 1;
while ( jahrNachGeburt < hjahr )
{
if (schaltjahr(jahrNachGeburt)) // wir wollen das Jahr nach dem Geburtsjahr betrachten, denn das Geburtsjahr ist ja schon abgehandelt
{
tageGanzesJahr = tageGanzesJahr + 366;
}
else
{
tageGanzesJahr = tageGanzesJahr + 365;
}
jahrNachGeburt++;
}
return tageGanzesJahr;
}
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 20:57 Sa 15.12.2012 | Autor: | link963 |
Du hast in deinem Code durchgehend einen Fehler gemacht.
Wenn du prüfen willst, ob die Werte von zwei Variablen übereinstimmen, musst du "==" verwenden.
Möchtest du einer Variable einen Wert zuweisen, nimmst du "=".
Also zB
int b = x;
int a = b;
Dann liefert a == b ein true.
Grüße link963
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 21:07 Sa 15.12.2012 | Autor: | Mija |
Oh stimmt, vielen Dank! (peinlich..) Das ist ein typischer Fehler von mir, der mir irgendwie nie auffällt.
Vielen Dank! :)
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 21:12 Sa 15.12.2012 | Autor: | link963 |
Ja, mir ist es auch nicht gleich aufgefallen ;)
Keine Ursache.
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 20:46 Sa 15.12.2012 | Autor: | Mija |
Hier ist mal mein aktueller Code (ich habe noch ein paar Kleinigkeiten gefunden. Mittlerweile bin ich 713 Tage alt :D Ich glaube, dass der Fehler immer noch in der Funktion tageGanzesJahrBerechnen liegt, denn sonst wären es ja wesentlich mehr Tage):
/* Wie alt bin ich? */
#include <stdio.h>
//Funktionsdeklarationen
int schaltjahr(int);
int monatUngerade(int);
int tageGanzesJahrBerechnen(int,int);
int anzahlTageBisDatum(int,int);
int anzahlTageBisEnde(int,int);
int tageInsgesamtBerechnen(int,int,int,int,int,int);
//Funktionsdefinitionen
//prüft, ob das betreffende Jahr ein Schaltjahr ist oder nicht
int schaltjahr(int jahr)
{
if ( jahr % 4 == 0 && jahr % 100 != 0 || jahr % 400 == 0 )
return 1;
else
return 0;
}
//Prüfen, ob der Monat ungerade ist (also Monat 01, 03, 05 usw.)
int monatUngerade(int gmonat)
{
if (gmonat % 2 != 0)
return 1;
else
return 0;
}
//Jahre zwischen Geburtsjahr und aktuelles Jahr betrachten und dessen Tage zusammenzählen
int tageGanzesJahrBerechnen(int gjahr, int hjahr)
{
int tageGanzesJahr=0;
int jahrNachGeburt = gjahr + 1;
while ( jahrNachGeburt < hjahr )
{
if (schaltjahr(jahrNachGeburt)) // wir wollen das Jahr nach dem Geburtsjahr betrachten, denn das Geburtsjahr ist ja schon abgehandelt
{
tageGanzesJahr = tageGanzesJahr + 366;
}
else
{
tageGanzesJahr = tageGanzesJahr + 365;
}
jahrNachGeburt++;
}
return tageGanzesJahr;
}
//berechnet die Tage im aktuellen Jahr vom Jahresanfang bis zum aktuellen Datum
int anzahlTageBisDatum(int htag, int hmonat, int hjahr)
{
int jan = 31; int feb = 0; int maerz = 31; int apr = 30; int mai = 31; int juni = 30;
int juli = 31; int aug = 31; int sep = 30; int okt = 31; int nov = 30; int dez = 31;
int volleMonate=0;
int tageAktuellesJahr=0;
if (schaltjahr(hjahr)) // aktuelles Jahr ist ein Schaltjahr
feb = 29;
else // aktuelles Jahr ist kein Schaltjahr
feb = 28;
if (hmonat = 12)
volleMonate = jan + feb + maerz + apr + mai + juni + juli + aug + sep + okt + nov;
else if (hmonat = 11)
volleMonate = jan + feb + maerz + apr + mai + juni + juli + aug + sep + okt;
else if (hmonat = 10)
volleMonate = jan + feb + maerz + apr + mai + juni + juli + aug + sep;
else if (hmonat = 9)
volleMonate = jan + feb + maerz + apr + mai + juni + juli + aug;
else if (hmonat = 8)
volleMonate = jan + feb + maerz + apr + mai + juni + juli;
else if (hmonat = 7)
volleMonate = jan + feb + maerz + apr + mai + juni;
else if (hmonat = 6)
volleMonate = jan + feb + maerz + apr + mai;
else if (hmonat = 5)
volleMonate = jan + feb + maerz + apr;
else if (hmonat = 4)
volleMonate = jan + feb + maerz;
else if (hmonat = 3)
volleMonate = jan + feb;
else if (hmonat = 2)
volleMonate = jan;
else //falls hmonat = 1
volleMonate = 0;
tageAktuellesJahr = volleMonate + htag;
return tageAktuellesJahr;
}
//berechnet die Tage im Geburtsjahr vom Geburtsdatum bis zum Ende des Geburtsjahres
int anzahlTageBisEnde(int gtag, int gmonat, int gjahr)
{
int jan = 31; int feb = 0; int maerz = 31; int apr = 30; int mai = 31; int juni = 30;
int juli = 31; int aug = 31; int sep = 30; int okt = 31; int nov = 30; int dez = 31;
int diffMonat=0;
int summeTage=0;
int diffTage=0;
int tageGeburtsjahr=0;
if (schaltjahr(gjahr))
feb = 29;
else
feb = 28;
//ganze Monate zusammenrechnen
diffMonat = 12 - gmonat;
if (diffMonat = 11)
summeTage = dez + nov + okt + sep + aug + juli + juni + mai + apr + maerz + feb;
else if (diffMonat = 10)
summeTage = dez + nov + okt + sep + aug + juli + juni + mai + apr + maerz;
else if (diffMonat = 9)
summeTage = dez + nov + okt + sep + aug + juli + juni + mai + apr;
else if (diffMonat = 8)
summeTage = dez + nov + okt + sep + aug + juli + juni + mai;
else if (diffMonat = 7)
summeTage = dez + nov + okt + sep + aug + juli + juni;
else if (diffMonat = 6)
summeTage = dez + nov + okt + sep + aug + juli;
else if (diffMonat = 5)
summeTage = dez + nov + okt + sep + aug;
else if (diffMonat = 4)
summeTage = dez + nov + okt + sep;
else if (diffMonat = 3)
summeTage = dez + nov + okt;
else if (diffMonat = 2)
summeTage = dez + nov;
else if (diffMonat = 1)
summeTage = dez;
else //falls diffMonat = 0
summeTage = 0;
//ganze Tage zusammenrechnen
if ( ( gmonat<8 && monatUngerade(gmonat) ) || ( gmonat >=8 && !monatUngerade(gmonat) ) )
diffTage = 31 - gtag;
else if ( ( gmonat!=2 && gmonat<8 && !monatUngerade(gmonat) ) || ( gmonat >= 8 && monatUngerade(gmonat) ) )
diffTage = 30 - gtag;
else if (gmonat = 2 && schaltjahr(gjahr))
diffTage = 29 - gtag;
else // also if (gmonat = 1 && schaltjahr(gjahr)=FALSE)
diffTage = 28 - gtag;
tageGeburtsjahr = summeTage + diffTage;
return tageGeburtsjahr;
}
int tageInsgesamtBerechnen(int gtag, int gmonat, int gjahr, int htag, int hmonat, int hjahr)
{
int tageGeburtsjahr=0;
int tageAktuellesJahr=0;
int tageGanzesJahr=0;
int tageInsgesamt;
tageGeburtsjahr = anzahlTageBisEnde(gtag, gmonat, gjahr);
tageAktuellesJahr = anzahlTageBisDatum(htag, hmonat, hjahr);
tageGanzesJahr = tageGanzesJahrBerechnen(gjahr, hjahr);
tageInsgesamt = tageGeburtsjahr + tageGanzesJahr + tageAktuellesJahr;
return tageInsgesamt;
}
//Main-Programm
int main(void)
{
int gtag; int gmonat; int gjahr;
int htag; int hmonat; int hjahr;
int tageGeburtsjahr; int tageAktuellesJahr; int tageGanzesJahr;
int tageInsgesamt;
//Eingabe Geburtsdatum
printf("Bitte geben Sie Ihr Geburtsdatum [mm] ein!\n");
[/mm]
printf("Tag: ");
scanf("%d", >ag);
printf("Monat: ");
scanf("%d", &gmonat);
printf("Jahr: ");
scanf("%d", &gjahr);
//Eingabe aktuelles Datum
[mm] printf("\nBitte [/mm] geben Sie das heutige Datum [mm] ein!\n");
[/mm]
printf("Tag: ");
scanf("%d", &htag);
printf("Monat: ");
scanf("%d", &hmonat);
printf("Jahr: ");
scanf("%d", &hjahr);
//Schleife, falls ein ungültiges Datum eingegeben wurde
while ( gtag<1 || gmonat<1 || gjahr<1 || gtag>31
|| ( gmonat=2 && gtag>29 && schaltjahr(gtag) ) || ( gmonat=2 && gtag>28 && !schaltjahr(gtag) )
|| ( ( gtag>30 && gmonat!=2 && gmonat<8 && !monatUngerade(gmonat) ) || ( gtag>30 && gmonat >= 8 && monatUngerade(gmonat) ) )
|| htag<1 || hmonat<1 || hjahr<1 || htag>31
|| ( gmonat=2 && gtag>29 && schaltjahr(gtag) ) || ( gmonat=2 && gtag>28 && !schaltjahr(gtag) )
|| ( ( gtag>30 && gmonat!=2 && gmonat<8 && !monatUngerade(gmonat) ) || ( gtag>30 && gmonat >= 8 && monatUngerade(gmonat) ) )
)
{
[mm] printf("\nGeben [/mm] Sie ein gueltiges Datum [mm] ein!\n\n");
[/mm]
//Eingabe Geburtsdatum
printf("Bitte geben Sie Ihr Geburtsdatum [mm] ein!\n");
[/mm]
printf("Tag: ");
scanf("%d", >ag);
printf("Monat: ");
scanf("%d", &gmonat);
printf("Jahr: ");
scanf("%d", &gjahr);
//Eingabe aktuelles Datum
[mm] printf("\nBitte [/mm] geben Sie das heutige Datum [mm] ein!\n");
[/mm]
printf("Tag: ");
scanf("%d", &htag);
printf("Monat: ");
scanf("%d", &hmonat);
printf("Jahr: ");
scanf("%d", &hjahr);
}
//Schleife, falls Geburtsdatum vor Enddatum liegt
while ( (hjahr<gjahr) || (hjahr=gjahr && hmonat<gmonat) || ( ( (hjahr=gjahr) && (hmonat=gmonat) ) && htag<=gtag ) )
{
[mm] printf("\nDas [/mm] Geburtsdatum muss vor dem Enddatum [mm] liegen!\n\n");
[/mm]
//Eingabe Geburtsdatum
printf("Bitte geben Sie Ihr Geburtsdatum [mm] ein!\n");
[/mm]
printf("Tag: ");
scanf("%d", >ag);
printf("Monat: ");
scanf("%d", &gmonat);
printf("Jahr: ");
scanf("%d", &gjahr);
//Eingabe aktuelles Datum
[mm] printf("\nBitte [/mm] geben Sie das heutige Datum [mm] ein!\n");
[/mm]
printf("Tag: ");
scanf("%d", &htag);
printf("Monat: ");
scanf("%d", &hmonat);
printf("Jahr: ");
scanf("%d", &hjahr);
}
tageInsgesamt = tageInsgesamtBerechnen(gtag, gmonat, gjahr, htag, hmonat, hjahr);
[mm] printf("\n\nSie [/mm] sind %d Tage [mm] alt!\n\n\n", [/mm] tageInsgesamt);
return 0;
}
|
|
|
|