Seite 1 von 1

printf/switch - Datum drucken

Verfasst: Mo Dez 07, 2020 4:07 pm
von Robocop1
Hi,
ich hänge seit ner halben Woche an folgendem Code, würde gern Datum/Daten im C ausgeben: bzw. übersichtlicher im Anhang.
Mir ist bewusst dass v.a. die Zeile default: printf("th of"); nicht sauber ist, da Daten über den 31sten hinaus angezeigt werden.
Ich verstehe jedoch nicht, wieso das Monat nicht gedruckt wird, sondern nur Tag+Jahr.

Danke!
LG,
Murphy
------------------------------------------------------------------------------------------

Code: Alles auswählen

#include <stdio.h>

int main()
{

   int day, month, year;
   char* monthname[12]= {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};

   scanf("%d-%d-%d", &year, &month, &day);

   printf("%d", day);

        switch(day) {
            case 1: printf("st of"); break;
            case 21: printf("st of"); break;
            case 31: printf("st of"); break;
            case 2: printf("nd of"); break;
            case 22: printf("nd of"); break;
            case 3: printf("rd of"); break;
            case 23: printf("rd of"); break;
            default: printf("th of");
        }

    printf("%s, %d", monthname, year);

    return 0;
}

Re: printf/switch - Datum drucken

Verfasst: Mo Dez 07, 2020 4:31 pm
von cloidnerux
Hallo Robocop1/Murphy und Willkommen im Forum.
Du selektierst keinen Monat in der Ausgabe, damit kann es auch nicht funktionieren:

Code: Alles auswählen

printf("%s, %d", monthname, year);
Sollte eher

Code: Alles auswählen

printf("%s, %d", monthname[month], year);
sein

Re: printf/switch - Datum drucken

Verfasst: Mo Dez 07, 2020 9:15 pm
von Robocop1
cloidnerux hat geschrieben:
Mo Dez 07, 2020 4:31 pm
Hallo Robocop1/Murphy und Willkommen im Forum.
Du selektierst keinen Monat in der Ausgabe, damit kann es auch nicht funktionieren:

Code: Alles auswählen

printf("%s, %d", monthname, year);
Sollte eher

Code: Alles auswählen

printf("%s, %d", monthname[month], year);
sein
Hallo !

Danke das funkt einwandfrei.

Jetzt muss ich nur noch ne Bedingung adden die Zahlen über 31 ausschließt. Hat C eine eigenen Kalender integriert, sodass er realistische Daten erkennt?

Re: printf/switch - Datum drucken

Verfasst: Di Dez 08, 2020 9:55 am
von Xin
Robocop1 hat geschrieben:
Mo Dez 07, 2020 9:15 pm
Jetzt muss ich nur noch ne Bedingung adden die Zahlen über 31 ausschließt. Hat C eine eigenen Kalender integriert, sodass er realistische Daten erkennt?
Wenn ich mich recht entsinne werden unrealistische Daten möglichst umgerechnet. Der 32. März ist also gleichbedeutend mit dem 1. April. Der 32. März wird also nicht abgelehnt, wenn Du daraus ein Datum generierst.

Ob Dir das Datumsformat gefällt, musst Du selbst überprüfen.

C bietet einige Funktionen an: time.h
Für Dich interessant ist möglicherweise mktime() mit Code-Beispiel.

Re: printf/switch - Datum drucken

Verfasst: So Dez 27, 2020 3:47 pm
von jomaber
Ich würde die Dimension weglassen, weil der Compiler die Größe selbst ermittelt; außerdem: das 1. Element ist am besten leer, d.h. der Januar beginnt besser mit Index 1, also mit dem 2. Element, denn die Datumsangabe erfolgt bei scanf so: 2020-12-27. Es ergibt sich andernfalls ein Fehler, weil monthname[12] gar nicht existierte.

Code: Alles auswählen

    int day, month, year;
    char* monthname[]= {"?", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
    scanf("%d-%d-%d", &year, &month, &day);
 

Re: printf/switch - Datum drucken

Verfasst: Do Dez 31, 2020 2:08 am
von Robocop1
Ja genau übersehen, hab es nach deinem Hinweis mal so probiert, mit month-1 für korrekten Index.
Fragen1.PNG