Ein- und Ausgabe



  • Guten Tag,

    bin gerade über ein sehr altes Übungsbeispiel gestoßen und wollte es auch sofort zur Übung ausprogrammieren, jedoch bereitet mir dieses scheinbar höllisch leichte Beispiel Probleme:

    Schreiben Sie ein Programm, welches die 3 Werte eines Datums (Tag, Monat, Jahr) im Format TT.MM.JJJJ auf einmal einliest und mittels eingelesenen Werte im Format MM.TT.JJ wieder ausgibt. (Keine Strings verwenden, nur scanf u. printf)

    #include <stdio.h>
    
    void main()
    {
    	int tag;
    	int monat;
    	int jahr;
    
    	scanf("%d.%d.%d", &tag, &monat, &jahr);
    	printf("%d.%d.%d", monat, tag, jahr);
    
    	getch();
    }
    

    Bei Eingabe: 02.11.1994 ist die Ausgabe: 11.2.1994 .
    Wie bekomme ich es hin, dass der 0er (wenn einstellige Zahl) erhalten bleibt u. wie kürze ich die erste 2 stellen aus der Jahreszahl heraus?



  • Mit führenden Nullen kannst du die Werte ausgeben, indem du als Format %02d angibst, die überflüssigen Ziffern bei der Jahresangabe mußt du im Zweifelsfall selber abschneiden (Stichwort: Modulo).

    PS: Und das void main() solltest du ganz schnell vergessen - korrekt heißt es int main() .



  • Alles klar, danke!
    Jedoch komme ich mit diesem Modulo Operator nicht zurecht - er gibt jeweils den Rest einer Division, aber wie soll mir das bei diesem Bsp weiterhelfen?



  • MichaelE schrieb:

    Jedoch komme ich mit diesem Modulo Operator nicht zurecht - er gibt jeweils den Rest einer Division, aber wie soll mir das bei diesem Bsp weiterhelfen?

    Wie würdest du es denn machen, wenn du von Hand an die Aufgabe herangehen müsstest?
    Wenn du die Jahreszahl durch 100 teilst, erhältst du das Jahrhundert und als Divisionsrest die zweistellige Jahreszahl.



  • Leider hatte ich hierzu keine Idee, am ehesten hätte ich es mit Strings gelöst, aber diese nicht erlaubt sind.

    Aber jetzt funktioniert es so, wie es soll - danke nochmals 🙂



  • scanf liefert einen Rückgabewert, an dem man die Anzahl der erfolgreich übernommenen Werte ablesen kann.
    Rückgabewerte werden von Anfängern meistens ignoriert, du kannst ja mal ausprobieren, was passiert, wenn du ungültige Eingaben machst.

    http://www.ideone.com/JHufD



  • mit "%02d" sollte es gehen



  • xoosksicskoox schrieb:

    mit "%02d" sollte es gehen

    Oder.. auch.. nicht.


Anmelden zum Antworten