printf/switch - Datum drucken

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Robocop1
Beiträge: 24
Registriert: Mo Dez 07, 2020 3:59 pm

printf/switch - Datum drucken

Beitrag von Robocop1 » Mo Dez 07, 2020 4:07 pm

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;
}
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: printf/switch - Datum drucken

Beitrag von cloidnerux » 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
Redundanz macht wiederholen unnötig.
quod erat expectandum

Robocop1
Beiträge: 24
Registriert: Mo Dez 07, 2020 3:59 pm

Re: printf/switch - Datum drucken

Beitrag von Robocop1 » Mo Dez 07, 2020 9:15 pm

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?

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: printf/switch - Datum drucken

Beitrag von Xin » Di Dez 08, 2020 9:55 am

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

jomaber
Beiträge: 10
Registriert: Do Nov 26, 2020 10:47 am

Re: printf/switch - Datum drucken

Beitrag von jomaber » So Dez 27, 2020 3:47 pm

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);
 

Robocop1
Beiträge: 24
Registriert: Mo Dez 07, 2020 3:59 pm

Re: printf/switch - Datum drucken

Beitrag von Robocop1 » Do Dez 31, 2020 2:08 am

Ja genau übersehen, hab es nach deinem Hinweis mal so probiert, mit month-1 für korrekten Index.
Fragen1.PNG
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Antworten