Prog
-
#include <stdio.h>
void main()
{
int Eingabewert,Tag,c,Monat,Jahr;do
{
printf("Bitte geben Sie das Datum in der Form TTMMJJ ein!\n");
scanf("%d",&Eingabewert);
Tag=Eingabewert/10000;/* Der eingegebene Wert wird durch 10000 geteilt. Weil die Variablen keine Gleitkommazahlen sind, fallen die Kommastellen weg*/
if(Tag<=31)
{
printf("Tag:%i\n", Tag);}
else if (Tag>31)
{
printf("Es gibt nur max. 31 Tage, erneute Eingabe erforderlich!\n")
}
c=Eingabewert%10000; /*Die letzten 4 Zahlen vom eingegebenen Wert werden behalten*/
Monat= c/100; /*Dieser Wert wird durch 100 geteilt-die ersten 2 Zahlen bleiben stehen*/
if(Monat<=12)
{
if (Monat==1){
else if (Monat==1)
{
printf("Monat: Januar\n"); /*Jetzt wird jeder Zahl von 1 bis 12 ein Monatsname zugeteilt!*/
}
else if (Monat==2)
{
printf (Monat: Februar\n");}
else if (Monat==3)
{
printf( "Monat: Maerz\n");
}
else if (Monat==4)
{
printf( "Monat: April\n");
}
else if (Monat==5)
{
printf( "Monat: Mai\n");
}
else if(Monat==6)
{
printf( "Monat: Juni\n");
}
else if(Monat==7)
{
printf("Monat: Juli\n");
}
else if(Monat==8)
{
printf("Monat: August\n");
}
else if(Monat==9)
{
printf("Monat: September\n");
}
else if(Monat==10)
{
printf("Monat: Oktober\n");
}
else if(Monat==11)
{
printf("Monat: November\n");
}
else if(Monat==12)
{
printf("Monat: Dezember\n");
}
}
else if (Monat>12)
{
printf("Nur 12 Monate verfügbar!)\n");
}
}while(Tag>31 || Monat>12);
Jahr=Eingabewert%100;
printf("Jahr: %i\n",Jahr+2000);
}
wie kann ich denn jetzt noch den Monaten entsprechende maximale Tage zuordnen?? (z.b. hat ja der februar meist nur 28)
-
Lisa-Blume schrieb:
#include <stdio.h>
void main()
{
int Eingabewert,Tag,c,Monat,Jahr;do
{
printf("Bitte geben Sie das Datum in der Form TTMMJJ ein!\n");
scanf("%d",&Eingabewert);
Tag=Eingabewert/10000;/* Der eingegebene Wert wird durch 10000 geteilt. Weil die Variablen keine Gleitkommazahlen sind, fallen die Kommastellen weg*/
if(Tag<=31)
{
printf("Tag:%i\n", Tag);}
else if (Tag>31)
{
printf("Es gibt nur max. 31 Tage, erneute Eingabe erforderlich!\n")
}
c=Eingabewert%10000; /*Die letzten 4 Zahlen vom eingegebenen Wert werden behalten*/
Monat= c/100; /*Dieser Wert wird durch 100 geteilt-die ersten 2 Zahlen bleiben stehen*/
if(Monat<=12)
{
if (Monat==1){
else if (Monat==1)
{
printf("Monat: Januar\n"); /*Jetzt wird jeder Zahl von 1 bis 12 ein Monatsname zugeteilt!*/
}
else if (Monat==2)
{
printf ( "Monat: Februar\n");}
else if (Monat==3)
{
printf( "Monat: Maerz\n");
}
else if (Monat==4)
{
printf( "Monat: April\n");
}
else if (Monat==5)
{
printf( "Monat: Mai\n");
}
else if(Monat==6)
{
printf( "Monat: Juni\n");
}
else if(Monat==7)
{
printf("Monat: Juli\n");
}
else if(Monat==8)
{
printf("Monat: August\n");
}
else if(Monat==9)
{
printf("Monat: September\n");
}
else if(Monat==10)
{
printf("Monat: Oktober\n");
}
else if(Monat==11)
{
printf("Monat: November\n");
}
else if(Monat==12)
{
printf("Monat: Dezember\n");
}
}
else if (Monat>12)
{
printf("Nur 12 Monate verfügbar!)\n");
}
}while(Tag>31 || Monat>12);
Jahr=Eingabewert%100;
printf("Jahr: %i\n",Jahr+2000);
}
wie kann ich denn jetzt noch den Monaten entsprechende maximale Tage zuordnen?? (z.b. hat ja der februar meist nur 28)
zudem bekomm ich den fehler in den ersten zeilen nich weg und wie das jetz mit dem ich nenn es mal " konvertieren " im compiler geht weiss ich auch nich welches programm kann ich/sollte ich nehmen
über hilfe bin ich sehr dankbar
gruß lisa
ps. hab mich anmelden können
-
Hi Lisa,
sorry, aber Dein Code ist grauenhaft
!
Mal ein paar Hinweise:- main() muss int zurückgeben, um standardkonform zu sein - selbst wenn Anderes zufällig geht, sollte man es sich gleich richtig angewöhnen.
- printf/scanf() sind C-Altlasten, für die es in ++ die viel besseren (komfortableren, sichereren, ...) Varianten cout/cin und #include<iostream> (statt stdio.h) gibt
- Endlose if-else-if-Ketten sind in 99% der Fälle überflüssig und führen in 102% der Fälle zu unlesbarem/unwartbarem Code.
- Da int's sowieso keine Nachkommastellen ahben können, braucht man ach keine "wegzuschneiden".
- Wenn Du den Eingabewert durch 10000 teilst, sind damit die Informationen der letzten 4 Stellen (Monat, Tag) einfach weg und kommen auch nicht wieder.
- Offensichtlich willst Du Zahlen Zeichenketten ("Strings") zuordnen (1 -> "Januar", 2 -> ...) Für sowas bieten sich "Container" an. Wenn es so einfach ist, wie hier (simples 1:1-Mapping von 1-12 auf "Januar"-"Dezember"), reichen vector oder gar ein Array aus. Die Position im Container entspricht dann Deiner Zahl.
- Dasselbe geht für die "maximale Anzahl von Monatstagen": Array.
Mal ein kleines Beispiel:
string const MonatsListe[] = { "Januar", "Februar", "Maerz" }; unsigned int const maxTageInMonat[] = { 31, 28, 31 }; int main() { unsigned int Eingabewert, Tag, Monat,Jahr; bool gueltig = false; while(!gueltig) { cout << "Bitte geben Sie das Datum in der Form TTMMJJ ein!\n"; if(cin>>Eingabewert && Eingabewert > 0) { Jahr = Eingabewert % 100; Eingabewert /= 100; Monat = Eingabewert; Tag = Eingabewert / 10; gueltig = Monat > 0 && Monat <= 3 && Tag <= maxTageInMonat[Monat-1]; // -1, weil bei Array ab 0 gezählt wird } } cout << Tag << "." << MonatsListe[Monat-1] << " "<< Jahr << "\n"; return 0; }So - das solltest Du noch korrigieren auf/erweitern um
- eine korrekte Berechnung von Tag/Monat/Jahr (habe ein paar Fehler eingebaut ;))
- Prüfung, ob der Eingabewert genug (und nicht zuviel ?) Stellen hat,
- eine Abbruchbedingung (öfter als 3mal braucht niemand zu probieren; Man kann jede Funktion - auch main() - mittels return verlassen)
- Schaltjahresprüfung für den Februar (vllt. eine Funktion ?)
- ...
Gruß,
Simon2.