Datum extrahieren in C



  • Hi,

    ich würde gerne ein auf der Kommandozeile eingegebenes Datum extrahieren und in unsigned Variablen schreiben.
    Leider funktioniert das nicht wie gedacht.
    Habe es bereits nur mal mit dem Tag versucht und selbst dann bekomme ich einen anderen Wert ausgegeben, als eingegeben.

    #include<stdio.h>
    #include<stdio.h>
    
    int main(){
    	char answer[11];
    	unsigned int day, month, year;
    
    	printf("Bitte geben Sie ein Datum ein\n");
    	scanf("%s", &answer);
    
    	day = answer[0];
    	// day .= answer[1]; funktioniert auch nicht
    
    	printf("Tag: %d\n", day);	
    }
    


  • Hi,

    der zweimalige Include der Headerdatei ist nicht die Ursache. Das war nur ein Fehler meinerseits.


  • Mod

    Was soll denn hinterher in deiner Variable stehen? Unsigned und Datum passen irgendwie nicht zusammen (Guck mal die Typen in der time.h an). Und brauchst du den Zwischenschritt über die Zeichenkette überhaupt? So wie es jetzt aussieht, soll hinterher die Variablen den Wert des Tages, Monats und des Jahres haben. Das geht doch auch direkt mit:

    #include<stdio.h>
    
    int main()
    {
      unsigned day, month, year;
      puts("Datum?");
      if (scanf("%u.%u.%u", &day, &month, &year) == 3)
        printf("Tag als unsigned: %u\nMonat als unsigned: %u\nJahr als unsigned: %u\n",
               day, month, year);
      else
        puts("Das war kein gültiges Datum.");
    }
    

    Das kannst du natürlich auch mittels sscanf mit deiner Zeichenkette als Quelle anstatt der Standardeingabe machen.

    Aber was soll das hinterher werden? Wie schon gesagt, gibt es in C bereits fertige Datumsfunktionen und die verwenden andere Datentypen. Es sieht momentan ein bisschen so aus, als würdest du die Standardbibliothek nachprogrammieren.

    P.S.: Und warum dein Programm nicht funktioniert: Du hast den Unterschied zwischen der Repräsentation einer Zahl (hier als Zeichenkette) und dem Wert einer Zahl (im mathematischen Sinne) nicht verstanden. Oder du verstehst den Unterschied, aber kannst ihn nicht in C formulieren. Dein answer ist eine Repräsentation, dein day ein Wert. Das kannst du in C nicht einfach mittels = umwandeln. Du brauchst dazu so Funktionen wie atoi oder die scanf-Familie. Deine Zuweisung day = answer[0]; compiliert, da answer[0] ein einzelnes Zeichen aus der Repräsentation ist und Zeichen sind in C auch nur Zahlen(werte). Du hast dann den Wert des ersten Zeichens (also bei ASCII 49, 50 und 51 für '1', '2' und '3') bekommen.
    Dein Kommentar deutet darauf hin, dass du bloß wild rumprobiert hast, bis das Programm compilierte. Dazu zitiere ich gerne ein früheres Forenmitglied:

    c.rackwitz schrieb:

    Wenn du selber Code schreibst, musst du ihn auch verstehen. Code ist kein Haufen von wahllos zusammengeschmissenen Buchstaben und Zeichen, Code ist Logik pur. Du musst genau wissen, warum du wo und welches Zeichen setzt.


Anmelden zum Antworten