Funktion für nur Zahlen und nur Buchstaben



  • Power Off schrieb:

    volkard schrieb:

    man kann nicht alle programme so schreiben. schon die sprachauswahl setzt einem sehr enge grenzen.

    Wovon sprichst Du?

    symbolisch differenzieren geht mit lisp in ein paar zeilen. in c wirste alt dabei.
    haste nen interpreter drunter kannste dir unter umständen einen mathematischen parser schenken.
    haste keine lokalen variablen, wirds mit komplexeren programmen nicht gerade leicht.

    Man kann so gut wie in jeder Sprache so gut wie alles programmieren.

    halt mit mehr oder weniger aufwand.

    anläßlich eines programmierwettbewerbs, bei dem alle sprachen erlaubt waren, leistete ich mir den spaß, die aufgabe, nach dem gregorianischen kalnender aus tag, monat, jahr, die der user zuerst einzugeben hatte, den wochenzag zu berechnen, in brainfuck zu erstellen. zum testen nimm http://koti.mbnet.fi/villes/php/bf.php
    und natürlich muß ich betonen, daß der code klar und einfach ist. und wer den nicht kapiert oder nicht lesen mag, hat natürlich keine ahnung von brainfuck. ich such dir gerne einen link mit der sprachbeschreibung raus. oder ich zeig die ne kommentierte version.

    >++++[->++++<]>[-<++++>]<+++++.>++[->++++<]>[-<++++>]<[-<+>]<++++.+++++.-------.
    ------.+.+++.>++[->++++<]>[-<++++>]<.[-]<++++.++++.>++[->++++<]>[-<++++>]<.[-]++
    [->++++<]>[-<++++>]<[-<->]<-------.>++[->++++<]>[-<++++>]<[-<+>]<+++++++++.+++.-
    ----.------------.+++++++++++++++++++.>++[->++++<]>[-<++++>]<.[-]<[-]+++[->++++<
    ]>[-<++++>]<.+++++.-----.++++++++.-------.++++++++.--.-.++++.>++[->++++<]>[-<+++
    +>]<.[-]>>,>+++[->++++<]>[-<++++>]<[-<->]<[->++<]>[-<+++++>],>+++[->++++<]>[-<++
    ++>]<[-<->]<[-<+>],>+++[->++++<]>[-<++++>]<[-<->]<[->++<]>[-<+++++>],>+++[->++++
    <]>[-<++++>]<[-<->]<[-<+>],>+++[->++++<]>[-<++++>]<[-<->]<[->++<]>[-<+++++>],>++
    +[->++++<]>[-<++++>]<[-<->]<[-<+>],>+++[->++++<]>[-<++++>]<[-<->]<[->++<]>[-<+++
    ++>],>+++[->++++<]>[-<++++>]<[-<->]<[-<+>]<[->>+>+<<<]>>>[-<<<+>>>]++++[->>+>+<<
    <]>>>[-<<<+>>>]<-<<<[>>>[->+>+<<]>>[-<<+>>]+<[[-]>-<]>[-<+>]<[[-]<<+<[->>+>+<<<]
    >>>[-<<<+>>>]]<-<<<-]>>>[-<<->>]<[-]<-[-<+>]+<[[-]>-<]>[-<+>]<[-<+>]<<[->>+>+<<<
    ]>>>[-<<<+>>>]+<[[-]>-<]>[-<+>]<[-<->]<<<[->>>+>+<<<<]>>>>[-<<<<+>>>>]++++[->>+>
    +<<<]>>>[-<<<+>>>]<-<<<[>>>[->+>+<<]>>[-<<+>>]+<[[-]>-<]>[-<+>]<[[-]<<+<[->>+>+<
    <<]>>>[-<<<+>>>]]<-<<<-]>>>[-<<->>]<[-]<-[-<+>]<<<[->>>+>+<<<<]>>>>[-<<<<+>>>>]<
    [-<+>]+<[[-]>-<]>[-<+>]<[-<+>]<<<[->>>+>+<<<<]>>>>[-<<<<+>>>>]<<<[->>>+>+<<<<]>>
    >>[-<<<<+>>>>]<[-<+>]+<[[-]>-<]>[-<+>]<[-<<<<<<<+>>>>>>>]<<<<[->>>>>+>+<<<<<<]>>
    >>>>[-<<<<<<+>>>>>>]<[->+>+<<]>>[-<<+>>]<[[-]<->++++[-<<++++++++>>]<<->>]<[->+>+
    <<]>>[-<<+>>]<[[-]<-><<--->><<<[->>>>+>+<<<<<]>>>>>[-<<<<<+>>>>>]<[-<<<+>>>]<]<[
    ->+>+<<]>>[-<<+>>]<[[-]<-><<+++>><<<[->>>>+>+<<<<<]>>>>>[-<<<<<+>>>>>]<[-<<<->>>
    ]<]<[->+>+<<]>>[-<<+>>]<[[-]<-><<->>]<[->+>+<<]>>[-<<+>>]<[[-]<-><<+>>]<[->+>+<<
    ]>>[-<<+>>]<[[-]<-><<->>]<[->+>+<<]>>[-<<+>>]<[[-]<-><<+>>]<[->+>+<<]>>[-<<+>>]<
    [[-]<->]<[->+>+<<]>>[-<<+>>]<[[-]<-><<->>]<[->+>+<<]>>[-<<+>>]<[[-]<-><<+>>]<[->
    +>+<<]>>[-<<+>>]<[[-]<-><<->>]<[->+>+<<]>>[-<<+>>]<[[-]<-><<+>>]<[->+>+<<]>>[-<<
    +>>]<[[-]<-><<[-]>>]<[-]<[->+>+<<]>>[-<<+>>]+<[[-]>-<]>[-<+>]<[[-]<<<<<<<<+>>>>>
    >>>]<<<<<<[->>>>>>+>+<<<<<<<]>>>>>>>[-<<<<<<<+>>>>>>>]<[<[->>+>+<<<]>>>[-<<<+>>>
    ]+<[[-]>-<]>[-<+>]<[[-]<<+>><<<<<<<<<+>>>>>>>>>]<<->-]<[-]<[-]+<<<[->>>>+>+<<<<<
    ]>>>>>[-<<<<<+>>>>>]<[-[-[-<->[-]]]]<[[-]<[->+>+<<]>>[-<<+>>]+<[[-]>-<]>[-<+>]<[
    [-]<++++++++++[->++<]>[-<+++++>]<<->>]<->]<[->+>+<<]>>[-<<+>>]+++++++[->>+>+<<<]
    >>>[-<<<+>>>]<-<<<[>>>[->+>+<<]>>[-<<+>>]+<[[-]>-<]>[-<+>]<[[-]<<+<[->>+>+<<<]>>
    >[-<<<+>>>]]<-<<<-]>>>[-<<->>]<[-]<-[-<+>]<[-<<<<<+>>>>>]<[->+>+<<]>>[-<<+>>]+++
    +[->>+>+<<<]>>>[-<<<+>>>]<-<<<[>>>[->+>+<<]>>[-<<+>>]+<[[-]>-<]>[-<+>]<[[-]<<+<[
    ->>+>+<<<]>>>[-<<<+>>>]]<-<<<-]>>>[-]<[-<<+>>]<[-]+++++++[->>+>+<<<]>>>[-<<<+>>>
    ]<-<<<[>>>[->+>+<<]>>[-<<+>>]+<[[-]>-<]>[-<+>]<[[-]<<+<[->>+>+<<<]>>>[-<<<+>>>]]
    <-<<<-]>>>[-<<->>]<[-]<-[-<+>]<[-<<<<<+>>>>>]<<[->>+>+<<<]>>>[-<<<+>>>]+++++++[-
    >>+>+<<<]>>>[-<<<+>>>]<-<<<[>>>[->+>+<<]>>[-<<+>>]+<[[-]>-<]>[-<+>]<[[-]<<+<[->>
    +>+<<<]>>>[-<<<+>>>]]<-<<<-]>>>[-<<->>]<[-]<-[-<+>]<[-<<<<<+++++>>>>>]+++++++[-<
    <<<<+>>>>>]<<[->>+>+<<<]>>>[-<<<+>>>]++++[->>+>+<<<]>>>[-<<<+>>>]<-<<<[>>>[->+>+
    <<]>>[-<<+>>]+<[[-]>-<]>[-<+>]<[[-]<<+<[->>+>+<<<]>>>[-<<<+>>>]]<-<<<-]>>>[-]<[-
    <<+>>]<[-]+++++++[->>+>+<<<]>>>[-<<<+>>>]<-<<<[>>>[->+>+<<]>>[-<<+>>]+<[[-]>-<]>
    [-<+>]<[[-]<<+<[->>+>+<<<]>>>[-<<<+>>>]]<-<<<-]>>>[-<<->>]<[-]<-[-<+>]<[-<<<<<+>
    >>>>]<<<[->>>>+>+<<<<<]>>>>>[-<<<<<+>>>>>]<[->+>+<<]>>[-<<+>>]<[[-]<->]<[->+>+<<
    ]>>[-<<+>>]<[[-]<-><<+++>>]<[->+>+<<]>>[-<<+>>]<[[-]<-><<->>]<[->+>+<<]>>[-<<+>>
    ]<[[-]<-><<+++>>]<[->+>+<<]>>[-<<+>>]<[[-]<-><<++>>]<[->+>+<<]>>[-<<+>>]<[[-]<->
    <<+++>>]<[->+>+<<]>>[-<<+>>]<[[-]<-><<++>>]<[->+>+<<]>>[-<<+>>]<[[-]<-><<+++>>]<
    [->+>+<<]>>[-<<+>>]<[[-]<-><<+++>>]<[->+>+<<]>>[-<<+>>]<[[-]<-><<++>>]<[->+>+<<]
    >>[-<<+>>]<[[-]<-><<+++>>]<[->+>+<<]>>[-<<+>>]<[[-]<-><<++>>]<[-]+++++++[->>+>+<
    <<]>>>[-<<<+>>>]<-<<<[>>>[->+>+<<]>>[-<<+>>]+<[[-]>-<]>[-<+>]<[[-]<<+<[->>+>+<<<
    ]>>>[-<<<+>>>]]<-<<<-]>>>[-<<->>]<[-]<-[-<+>]<[-<<<<<+>>>>>]<<<<[->>>>+>+<<<<<]>
    >>>>[-<<<<<+>>>>>]<[-<<<<<+>>>>>]<[-]<[-]<[-]<[-]+++++++[->>+>+<<<]>>>[-<<<+>>>]
    <-<<<[>>>[->+>+<<]>>[-<<+>>]+<[[-]>-<]>[-<+>]<[[-]<<+<[->>+>+<<<]>>>[-<<<+>>>]]<
    -<<<-]>>>[-<<->>]<[-]<-[-<+>]<[->+<]<[->+<]>>[-<<+>>]<[[-]<[-]+++++++>]+[->+>+<<
    ]>>[-<<+>>]<[[-]<<[->>>+>+<<<<]>>>>[-<<<<+>>>>]+<[[-]>-<]>[-<+>]<[[-]>++++[->+++
    +<]>[-<++++>]<+++++++++++++++++++.>++[->++++<]>[-<++++>]<[-<+>]<----.-..++++++.-
    ------------------.++++++.[-]<<<->>]<]<[->+>+<<]>>[-<<+>>]<[[-]<<->><<[->>>+>+<<
    <<]>>>>[-<<<<+>>>>]<>+<[[-]>-<]>[-<+>]<[[-]>++++[->++++<]>[-<++++>]<++++++++++++
    +.>++[->++++<]>[-<++++>]<[-<+>]<++.-.++++++.-------------------.++++++.[-]<<<->>
    ]<]<[->+>+<<]>>[-<<+>>]<[[-]<<->><<[->>>+>+<<<<]>>>>[-<<<<+>>>>]+<[[-]>-<]>[-<+>
    ]<[[-]>++++[->++++<]>[-<++++>]<++++.>++[->++++<]>[-<++++>]<[-<+>]<+++++.----.+++
    ++++++.+++++.+.-------------------.++++++.[-]<<<->>]<]<[->+>+<<]>>[-<<+>>]<[[-]<
    <->><<[->>>+>+<<<<]>>>>[-<<<<+>>>>]+<[[-]>-<]>[-<+>]<[[-]>++++[->++++<]>[-<++++>
    ]<+++++++++++++.>++[->++++<]>[-<++++>]<[-<+>]<----.+++++++++++..+++.--------.---
    ---------.+++++.[-]<<<->>]<]<[->+>+<<]>>[-<<+>>]<[[-]<<->><<[->>>+>+<<<<]>>>>[-<
    <<<+>>>>]+<[[-]>-<]>[-<+>]<[[-]>++++[->++++<]>[-<++++>]<++++.>++[->++++<]>[-<+++
    +>]<[-<+>]<+++++++++++.-..---------.+++++++++++++.+.+.-------------------.++++++
    .[-]<<<->>]<]<[->+>+<<]>>[-<<+>>]<[[-]<<->><<[->>>+>+<<<<]>>>>[-<<<<+>>>>]+<[[-]
    >-<]>[-<+>]<[[-]>++++[->++++<]>[-<++++>]<++++++.>++[->++++<]>[-<++++>]<[-<+>]<++
    ++++++++++.-------------.++++.+++++++++++.-------------------.++++++.[-]<<<->>]<
    ]<[->+>+<<]>>[-<<+>>]<[[-]<<->><<[->>>+>+<<<<]>>>>[-<<<<+>>>>]+<[[-]>-<]>[-<+>]<
    [[-]>++++[->++++<]>[-<++++>]<+++++++++++++++++++.>++[->++++<]>[-<++++>]<[-<+>]<-
    -----------------.++++++++++++.++++++.+.-------------------.++++++.[-]<<<->>]<]<
    [->+>+<<]>>[-<<+>>]<[[-]<<->><<[->>>+>+<<<<]>>>>[-<<<<+>>>>]+<[[-]>-<]>[-<+>]<[[
    -]>++++[->++++<]>[-<++++>]<++++++.>++[->++++<]>[-<++++>]<[-<+>]<-.+++.++++.-----
    --.+++++++++++++.[-]<<<->>]<]<[-]<[-]++++++++++.[-]<
    

    ok, das programm ist gut. es ist sogar vorbildlich, würde ich sagen. es ist auch noch wartbar. für brainfuck-verhältnisse optimal. es gibt aber andere sprachen, in denen kalenderprogramme besser wartbar sind.

    edit: der oben genannte interpreter schafft's nicht, weil er nur 30 sek laufzeit erlaubt.
    http://justice.loyola.edu/~mcoffey/pr/5k/i.html ist besser.



  • volkard schrieb:

    anläßlich eines programmierwettbewerbs, bei dem alle sprachen erlaubt waren, leistete ich mir den spaß, die aufgabe, nach dem gregorianischen kalnender aus tag, monat, jahr, die der user zuerst einzugeben hatte, den wochenzag zu berechnen, in brainfuck zu erstellen. zum testen nimm http://koti.mbnet.fi/villes/php/bf.php
    und natürlich muß ich betonen, daß der code klar und einfach ist. und wer den nicht kapiert, hat natürlich keine ahnung von brainfuck. ich such dir gerne einen link mit der sprachbeschreibung raus. oder ich zeig die ne kommentierte version.

    edit: der oben genannte interpreter schafft's nicht, weil er nur 30 sek laufzeit erlaubt.
    http://justice.loyola.edu/~mcoffey/pr/5k/i.html ist besser.

    Cool! 🙂

    Aber fuer jemanden, der Brainfuck kann, ist das doch kein Problem zu lesen, oder?

    Hier ist z.B. der Output eines Lexical Analyzers, den ich neulich geschrieben habe:

    #2:$2:c$8:I5:Alpha$E:{
    #4:$5:f$E:I7:beeswax$L:($N:I5:omega$S:,$U:I5:delta$a:)$b:;
    #6:$2:}$3:;
    #8:$2:M$C:I5:Alpha$H:.$I:I7:beeswax$Q:{
    #9:$5:I4:redo$9:4
    #A:$5:F$8:I5:omega$E:=$G:I5:delta$M:{
    #B:$8:I5:omega$E:A$H:I5:omega$N:/$P:N2:$Q:;
    #C:$8:I5:delta$E:A$H:I5:delta$N:+$P:N1:$Q:;
    #D:$8:J$D:I4:redo$H:;
    #E:$5:}
    #F:z
    #G:$8:y$D:{
    #H:$B:w$G:I1:i$H:;
    #I:$B:I1:i$D:A$G:N1:$H:;
    #J:$8:}
    #K:Y$I:I1:i$K:<$M:N5:
    #L:$8:d$B:{
    #M:k$G:I8:printnum$P:I1:i$Q:;
    #N:$8:}
    #O:$2:}
    #Q:c$8:I5:Alpha$E:I1:a$F:;
    #R:$2:k$7:I1:a$8:.$9:I7:beeswax$G:($I:N5:$J:,$L:N7:$N:)$O:;
    

    Fuer mich ist das kein Problem, zu lesen.

    Also Lesbarkeit ist immer relativ. 😉



  • Power Off schrieb:

    volkard schrieb:

    warum nicht wenigstens noch eatwhite?

    Weil readnum() nicht nur white-space ueberliest. Vielleicht solltest Du vor ausfuehrlicher Kritik den Code nochmal genau ansehen.

    ok, eatLine.
    warum das nicht?



  • mich beschleicht die befürchtung, daß mein code nur spaß war (weil ich damit garantiert den ersten (und einzigen) platz bei den brainfuckern kriege) und du deinen ernst meinst.



  • Weil readnum() nicht nur white-space ueberliest. Vielleicht solltest Du vor ausfuehrlicher Kritik den Code nochmal genau ansehen.

    ahh, danke dir. hab völlig vergessen das zu kritisieren.

    wenn der user ne false eingabe macht, soll er bitteschön ne fehlermeldung bekommen, und eine neue Eingabe tätigen, anstatt dass die funktion einfach alle zeichen bis zum ende der zeile killt(sofern nicht auf dem weg doch noch ne zahl oder ein '-' auftaucht 🙄). Im endeffekt sollte die funktion sofort abbrechen, sofern ein anderes zeichen ausser leerzeichen/zeilenumbrüchen/zahlen/'-' kommt.



  • Was haltet ihr hiervon?

    #include <stdlib.h>
    #include <stdio.h>
    #include <stdbool.h>
    
    int            chr = EOF;
    int            dig = EOF;
    int            val = 0;
    int            sgn = 0;
    
    void readchr( void ) {
       do {
          chr = getchar();
       } while ( chr == '\r' );
    }
    
    bool readdigit( void ) {
       if ( chr < '0' || chr > '9' ) return false;
       dig = chr;
       readchr();
       return true;
    }
    
    bool readdec( void ) {
       if ( !readdigit() ) return false;
       val = 0;
       do {
          val = val * 10 + ( dig - '0' );
       } while ( readdigit() );
       return true;
    }
    
    bool readint( void ) {
       if ( chr == '-' ) {
          readchr();
          sgn = -1;
       }
       else {
          sgn = 1;
       }
       if ( !readdec() ) return false;
       val *= sgn;
       return true;
    }
    
    void skipspc( void ) {
       while ( chr == ' ' || chr == '\t' ) readchr();
    }
    
    bool readnum( int* result ) {
       readchr();
       skipspc();
       if ( !readint() ) return false;
       skipspc();
       if ( chr != '\n' ) return false;
       *result = val;
       return true;
    }
    
    void skiptoeol( void ) {
       while ( chr != '\n' && chr != EOF ) readchr();
    }
    
    void promptnum( const char* name, int* result ) {
    RETRY:
       printf( "%s eingeben (ganze Zahl): ", name );
       fflush( stdout );
       if ( !readnum( result ) ) {
          skiptoeol();
          if ( chr == EOF ) {
             printf( "Eingabe abgebrochen (EOF)\n" );
             exit( EXIT_FAILURE );
          }
          printf( "Eingabefehler: %s muss ganze Zahl sein\n", name );
          goto RETRY;
       }
       printf( "%s = %d\n", name, *result ); 
    }
    
    int main( int argc, char** argv ) {
       int w;
       promptnum( "Watt", &w );
       return EXIT_SUCCESS;
    }
    


  • Power Off schrieb:

    Was haltet ihr hiervon?

    viel besser 👍
    jetzt kriegste auch nicht mehr allgemeines gemäkel, sondern konkrete mecker. naja das augenfällige goto und die globalen variablen wohl. wobei ich aber eher meine, daß die gar nicht so unhübsch in diesem fall sind.
    jetzt ruft das program eigentlich am lautestes danach, ein paar kleinigkeiten einzubauen, die mit c++ besser gehen.

    ich nehme mal ein kleines stück raus und gucke nach, ob die globalen vars vermeidbar sind, ohne daß man sich weh tut.

    bool readint( void ) {
       if ( chr == '-' ) {
          readchr();
          sgn = -1;
       }
       else {
          sgn = 1;
       }
       if ( !readdec() ) return false;
       val *= sgn;
       return true;
    }
    

    mache ich zu

    bool readint(int* val) {
       if ( chr == '-' ) {
          readchr();
          sgn = -1;
       }
       else {
          sgn = 1;
       }
       if ( !readdec(val) ) return false;
       *val *= sgn;
       return true;
    }
    

    und das zu

    bool readint(int* val) {
       if ( chr == '-' ) {
          readchr();
          if ( !readdec(val) ) return false;
          *val = -*val;
       }
       else {
          if ( !readdec(val) ) return false;
       }
       return true;
    }
    

    naja, man hat jetzt massig möglichkeiten, was zu ändern und es macht wieder spaß. auch wenn meine änderung wohl nicht so sinnvoll war. ich denke, es würde sich gut anfühlen, die globalen vars alle zu übergabeparametern zu machen. oder nach c++ wechseln und die werte zurückgeben und bei fehler exceptions werfen.

    edit:
    aber was mir voll gefällt, ist

    bool readnum( int* result ) { 
       readchr(); 
       skipspc(); 
       if ( !readint() ) return false; 
       skipspc(); 
       if ( chr != '\n' ) return false; 
       *result = val; 
       return true; 
    }
    

    bis auf den seltsamen readchr() am anfang, kann das ein halbidiot flüssig lesen und ich auch.



  • volkard schrieb:

    jetzt ruft das program eigentlich am lautestes danach, ein paar kleinigkeiten einzubauen, die mit c++ besser gehen.

    vergiss aber nicht, das wir im C Forum sind! 😉



  • volkard schrieb:

    naja, man hat jetzt massig möglichkeiten, was zu ändern und es macht wieder spaß. auch wenn meine änderung wohl nicht so sinnvoll war. ich denke, es würde sich gut anfühlen, die globalen vars alle zu übergabeparametern zu machen.

    Hmmmm ... fuehrt das nicht dazu, dass Parameter ueber mehrere Ebenen hinweg uebergeben werden?
    Waere da ein struct nicht besser?

    volkard schrieb:

    bis auf den seltsamen readchr() am anfang, kann das ein halbidiot flüssig lesen und ich auch.

    Soso.

    Der erste readchr() dient dazu, um das erste Zeichen einzulesen. Dadurch habe ich immer ein "aktuelles Zeichen", auf das ich pruefen kann und weitere Zeichen lesen kann. Das ist die Standardvorgehensweise bei recursive descendant Parsern.



  • Power Off schrieb:

    Hmmmm ... fuehrt das nicht dazu, dass Parameter ueber mehrere Ebenen hinweg uebergeben werden?

    jup.

    Waere da ein struct nicht besser?

    naja, wenn man ganz konsequent ist, müßte man ja auch den chr im struct mitführen oder übergeben.

    bool readnum( int* result, int* chr )
    

    fühlt sich wieder minderlustig an. statt der werte dig und val und sgn global könnte man die immer zurückgeben und dafür statt den error zurückzugeben den global machen. oder dazu noch...

    Der erste readchr() dient dazu, um das erste Zeichen einzulesen. Dadurch habe ich immer ein "aktuelles Zeichen", auf das ich pruefen kann und weitere Zeichen lesen kann. Das ist die Standardvorgehensweise bei recursive descendant Parsern.

    klar. man muß ein zeichen angucken können, ohne es wegzulesen. hab zu getchar() kein passendes ungetchar() gefunden. also muß man das eine zeichen puffern.

    ...würde man error und den chr in eine struct stecken, dann wäre das ja ein normaler eingabestrom. ich höre die objektorientierung leise anklopfen.



  • Power Off schrieb:

    volkard schrieb:

    aber Power Off hat die klappe zu weit aufgerissen und so getan, als sei er so perfekt wie TGGC

    Gar nicht wahr! Du bist doch hier der, der permanent die Klappe aufreisst!

    WEIL ER ES KANN!



  • hehejo schrieb:

    Power Off schrieb:

    volkard schrieb:

    aber Power Off hat die klappe zu weit aufgerissen und so getan, als sei er so perfekt wie TGGC

    Gar nicht wahr! Du bist doch hier der, der permanent die Klappe aufreisst!

    WEIL ER ES KANN!

    ... die Klappe aufreissen! 😃


Anmelden zum Antworten