String einlesen und rückwärts wieder ausgeben



  • @Peter: Ich hab' den Standard ja nicht gemacht .... aber ich halte mich dran. Und wenn's in diesem Forum nunmal um ANSI-C geht ... naja ... :))

    Dass das C in der Schule ein etwas anderes C ist, ist jedem klar. Ich pers. hab' mich mit meinen Lehrern schon rumgestritten (und verloren!), weil sie nicht einsehen wollten, dass 'if (x) a();' das gleiche bedeutet wie 'if (x) { a(); }.'



  • Minsch, mady, ich wollte doch nur eine Antwort haben auf meine Frage warum man das nicht verwenden soll! Warum gibbet diese funktionen void main(), und fflush überhaupt wenn man die nich verwenden soll?!



  • void main gibt es nicht und hat es nie gegeben. Das ist eine Erfindung von faulen Tutorial Schreibern!

    main hat die signatur

    int main(void)
    oder
    int main(int, char**)

    alles andere ist implementation defined und wenn ich nicht irre vor C99 sogar undefined!

    fflush ist nur für ausgabe ströme definiert - ist ja auch logisch: flushen des buffers heisst, den buffer wo hin schreiben undnicht ihn einfach loeschen!!

    ein blick in die FAQ tut dir sicher nicht weh!!



  • Man du Shade, du redest schon wie mein alter ProggenLehrer "goto gibt es nicht" loool - einfach irre geil der mann 😃 😃 😃

    Was ich nicht verstehe: ihr sagt immer blah blah gibt es nicht sülz, aber habt keine Begründung 🙂



  • @Peter: void main(...) kann's nicht geben, weil einige Betriebssysteme den Return-Wert eines Programms auswerten. Lieferst Du void zurück an Dein OS, dann kommt's auf Deinen Compiler an, ob er das zulässt bzw. welcher Maschinen-Code erzeugt wird. Das ganze ist dann also von einer bestimmten Umgebung abhängig.

    Das widerspricht der Philosophie der Programmiersprache C.

    lt. C weiß der Programmierer, was er tut. Dein Compiler kann diesen Code akzeptieren - Dein Programm stützt dann in einer anderen Umgebung aber vielleicht aus irgend einem Grund ab. Viel Spaß beim Finden solcher Fehler...

    EDIT: Hier noch ein kurzer Text über den Sinn von Standards: http://www.ifi.unizh.ch/~riedl/lectures/standard.html

    [ Dieser Beitrag wurde am 16.12.2002 um 18:19 Uhr von mady editiert. ]



  • Wenn festgelegt werden würde, das void main() immer EXIT_SUCCES zurückliefern würde, dann wüsste das der C-Programmierer und es gäbe kein Problem. Von daher ist das Argument irgendwie nichts.
    Wie war das mit int main() ohne return? Das soll ja korrekt sein, oder?

    Wenn jemand gerade Programmieren lernt sollte die Syntax und so'n firlefanz wie void main unwichtig sein... Ist natürlich trotzdem gut zu wissen das es eigentlich falsch ist.

    Peter: Hast du Zeiger verstanden? Sonst machts nicht viel Sinn meinen Code weiter zu erklären.

    [ Dieser Beitrag wurde am 16.12.2002 um 18:24 Uhr von DrGreenthumb editiert. ]



  • Original erstellt von Peter Piksa:
    ihr sagt immer blah blah gibt es nicht sülz, aber habt keine Begründung

    Nicht wir haben das? Haben doch wir! Lesen müssen Du: Tut mit sein Sprache wie! Halten Du dich müssen ahn Grammaig unt Schreibrächtung! Verstehen niemadn tut dich sonzt! C in das so genau ist! Versteht nur das der Compiler er kennt was! Compiler hier unt nix kennt void main() weil nix des Teil von Sprache! Unt nur sprechen Compiler Sprache eine eindeutige! Er nix was weiß Du meinst sonzt! Darum exakt sein Du müssen unt halten dich ahn tie Regeln wo Compiler auch kennen!

    NCRS!



  • meine rekursive lösung:

    #include <stdio.h>
    
    void print_reverse(char *ptr);
    
    int main()
    {
        char str[]="Hello";
    
        print_reverse(str);
    }
    
    void print_reverse(char *ptr)
    {
        if(*ptr != '\0') 
            print_reverse(ptr+1);
    
        printf("%c",*ptr);
    }
    

    die funktion wird solange neu aufgerufen (zeiger jedesmal um 1 weiterschieben) und damit der alte wert der variable auf dem stack(stapel) abgelegt, bis sie das ende des strings erreicht hat, dann fängt das rückspringen und ausgeben in umgekehrter reihenfolge an...die werte werden (beim letzten,also ganz oben, wird begonnen) wieder vom stack heruntergenommen bis wieder main erreicht ist, hoffe das war halbwegs verständlich....

    mfg



  • Original erstellt von Peter Piksa:
    **Man du Shade, du redest schon wie mein alter ProggenLehrer "goto gibt es nicht" loool - einfach irre geil der mann 😃 😃 😃

    Was ich nicht verstehe: ihr sagt immer blah blah gibt es nicht sülz, aber habt keine Begründung =)**

    goto gibt es sehr wohl.
    Schau mal: wenn du deutsch sprechen willst hältst du dich an den Duden, und wenn du C programmieren willst, dann hältst du dich an den Sprachstandard!

    Du würdest mich auch nicht verstehen wenn ich zu dir:
    wos wüst oida?
    sage! es sei denn du bist zufällig wiener :p

    ne, mal im ernst: es gibt regeln an die man sich halten muss, und zu denen gehört dass fflush nur für einen ausgabestrom definiert ist und main den return type int haben muss. siehe FAQ da habe ich die entsprechenden passagen aus dem standard hingeschrieben!



  • Und noch ne Variante der Vollständigkeit halber:
    (sollte auch etwas leichter nachzuvollziehen sein)

    for(i=(strlen(src)-1), j = 0; i >= 0 ; i--, j++)
       dst[j] = src[i];
    


  • Original erstellt von <sg>:
    **Und noch ne Variante der Vollständigkeit halber:
    (sollte auch etwas leichter nachzuvollziehen sein)

    for(i=(strlen(src)-1), j = 0; i >= 0 ; i--, j++)
       dst[j] = src[i];
    ```**
    

    Woaar abgefuckt geil wie du das gelöst hast...und ich schreib da son ellenlanges programm für *lol*



  • Original erstellt von DrGreenthumb:
    junix: strrev gibts nicht 😃

    Gibts wohl.



  • Original erstellt von Eßer:
    Gibts wohl.

    das ist mir neu!

    Wo gibt es das denn? Also mein Compiler hat es nicht...



  • hab von strrev auch noch nie was gehört.



  • Original erstellt von Peter Piksa:
    hab von strrev auch noch nie was gehört.

    Die Funktion gehört zum Lieferumfang von z.B. Borland Compilern. Nachdem diese Compiler recht verbreitet sind, kommt wohl öfters die Meinung auf, das diese und andere Funktionen (getch(), clrscr(), ...) zum Standard gehören.


Anmelden zum Antworten