Zurück auf Anfang



  • berniebutt schrieb:

    Dann hau da doch einfach eine Sprungmarke rein und mache deine gotos dorthin.
    Allerdings stösst du mit gotos auf wenig Freunde hier, eher gar keine! 😃

    lol, klare Ansage 😉 Brauche aber keine Freunde sondern rat. Hatte auch schon eine Sprungmarke dahin gesetzt, aber auch da entsteht dann eine Endlosschleife.

    Und ja, ich habe gerade mal die Basics drauf, mach das mehr als Hobby nebenbei. Was empfielst du mir den, wie mein Stil "Zeitgemäßer" wird?! ^^



  • theflyer schrieb:

    Was empfielst du mir den, wie mein Stil "Zeitgemäßer" wird?! ^^

    Kein goto.

    Ein Buch über C. Buch aus Papier und keine Online-Ausgabe (Das Buch davon aber auch nicht).

    Mach dich schlau über Einrückungsstil

    Kein goto.

    Das %c brauchst du nicht. scanf überliest Whitespace.
    Im Zusammenspiel mit anderen Eingabefunktionen mag das sinnvoll sein. Aber auch da gibt es sinnvoller Sachen.

    Kein goto.



  • oO schrieb:

    scheiß drauf, ich hab auch keine...

    hallo kellerassel, hier ist der kammerjäger, ich bin dein frooiiiiind!
    🙂



  • Heute setzt man Funktionen anstellen von GOTO ein, das ist so etwas wie wie ein besseres GOSUB/RETURN Konstrukt.

    Ich weiß zwar auch, dass man kein GOTO mehr nutzt, und ich habe dies seit dem C64 nicht mehr getan. Aber warum man nicht auch mal ein GOTO setzen darf, ist mir auch nicht ganz klar. Wahrscheinlich weil dann der Stack nicht mehr richtig abgebaut wird, weil man einfach aus einer Funktion springt, keine Ahnung. In Assembler wird ja sehr viel mit GOTO gearbeitet, nur dass es hier JMP heißt.

    Wäre aber mal toll von einem Profi hier eine gründliche Erklärung zu bekommen, warum man kein GOTO einsetzen soll, außer der Aussage dass es schlechtes Design ist.



  • Djikstra meint dazu:

    http://david.tribble.com/text/goto.html

    GoTo ist meiner Meinung nach Ausdruck eines miesen Programmdesigns.



  • In C ist goto nicht verboten und kann genutzt werden. Man sollte aber nur selten davon Gebrauch machen. Klare Bedingungen in Funktionen und Codeblöcken mit den üblichen Ablaufkriterien wie for, while, if, else, break, continue sind sehr viel übersichtlicher. Zum Einstieg in C und zum Üben kann man es eine Weile einsetzen.



  • Für Aufräumarbeiten sind gotos sehr praktisch und sinnvoll.


  • Mod

    berniebutt schrieb:

    Zum Einstieg in C und zum Üben kann man es eine Weile einsetzen.

    Und damit übt man dann was? Wie man es nicht übersichtlich macht?

    Hier ist goto absolut nicht angesagt, das Programm ist ein Muster für Spaghetticode im Frühstadium. Diese vielzitierten "Es gibt Fälle, in denen goto richtig sind! Dogmatische Verbote sind doof! Wääh! Wääh! Wääh!" sind absolute Ausnahmefälle, bei denen einem erfahrenen Programmierer einleuchtend ist, warum ein goto an der Stelle gesetzt werden kann (wirklich nötig ist es nie), ohne kryptisch zu sein. Die Grundargumentation von "goto considered harmful" stimmt aber trotzdem, warum goto im Normalfall einer guten Codequalität aktiv abträglich ist.



  • SeppJ schrieb:

    Und damit übt man dann was? Wie man es nicht übersichtlich macht?

    SeppJ, du greifst da zu hoch. Wir haben es hier mit einem C-Anfänger zu tun, der solche Dinge wie Schleifen, Codeblöcke und Funktionen noch nicht kennt und der erst später ein erfahrener Programmierer werden will oder auch nicht. Zum Lernen und Üben kann es nicht schaden, beispielsweise eine for- oder while-Schleife nur mit goto zu machen. Niemand wird im Ernst bei solchen Ansätzen bleiben! 🤡 Das war nicht das Thema.



  • Aufgabensetllung ist nicht ganz klar ich dachte so:

    #include <stdio.h>
    
    int main(void)
    {
    float Ergebnis, Eingabe;
    int auswahl, ok;
    char dummy;
    
      do {
    printf("\n Wollen Sie (1) DM->Euro oder (2) Euro->DM berechnet bekommen? \n\n");
    printf("(1) oder (2):");
    scanf("%d",&auswahl);
    // hier möchte ich gerne zurück zum Anfang, wenn die Eingabe !=1 oder !=2 ist.
    
    if( auswahl == 1 ) {
    
    ErgebnisEingabe:
    printf("Geben Sie den Betrag in DM ein:");
     ok = scanf("%f%c", &Ergebnis, &dummy);
    
    if (ok == 2 && dummy == '\n') {
    
    Eingabe=Ergebnis/1.95583;
    
    printf("Der Eingegebene Wert entspricht %.2f Euro \n",Eingabe);
    
    }
    }
    else if( auswahl == 2){
    
    EingabeErgebnis:
    printf("Geben Sie den Betrag in Euro ein:");
     ok = scanf("%f%c", &Ergebnis, &dummy);
    
    if (ok == 2 && dummy == '\n') {
    
    Eingabe=Ergebnis*1.95583;
    printf("Der Eingegebene Wert entspricht %.2f DM",Eingabe);
    }
    
                }
        } while( 1 );
    }
    


  • berniebutt schrieb:

    Wir haben es hier mit einem C-Anfänger zu tun, der solche Dinge wie Schleifen, Codeblöcke und Funktionen noch nicht kennt und der erst später ein erfahrener Programmierer werden will oder auch nicht. Zum Lernen und Üben kann es nicht schaden, beispielsweise eine for- oder while-Schleife nur mit goto zu machen.

    Naiver Nonsens. Wenn der Anfänger keine Schleifen kennt, kann er auch kein goto in for/while verwenden.
    Es gibt keinen Zeitpunkt für einen Anfänger, an dem er plötzlich feststellt/festlegt, dass er jetzt Profi ist und dann auch seinen Stil ändert. Einmal Erlerntes bleibt lange haften, und deshalb gehört goto nicht in Anfänger/Naivling-Hände.
    Gerade weil der Anfänger ein Anfänger ist, erschließt sich ihm eben nicht die Sinnfreiheit von goto, und C ist eben nicht als Lernsprache gedacht und erschaffen worden sondern aus ganz konkreten praktischen Erfordernissen und ganz gewiss ohne den Anspruch, auch nach 40 Jahren noch für jeden Programmierneuling intuitiv erlernbar zu sein. (http://www.spiegel.de/netzwelt/tech/0,1518,643152,00.html)
    Niemand wird plötzlich, durch Weglassen von goto, zum besseren Programmierer, die Angewohnheiten, die er in seiner bisherigen goto-Karriere eben dadurch, dass er wusste, dass es goto gibt, angenommen hat, wird er beibehalten und somit auch seine "Qualität".



  • Wutz schrieb:

    Naiver Nonsens .... Einmal Erlerntes bleibt lange haften, und deshalb gehört goto nicht in Anfänger/Naivling-Hände .... Gerade weil der Anfänger ein Anfänger ist, erschließt sich ihm eben nicht die Sinnfreiheit von goto, und C ist eben nicht als Lernsprache gedacht ....

    Quatsch mit Soße: Dann wären viele frühere Kiddies von C64 kommend für den Rest ihrer vielleicht professionellen Laufbahn völlig versaut geblieben? 😞
    Warum soll C oder C++ oder C# heute zum Lernen ungeeignet sein? 😕 Als reine Lernsprache wurde PASCAL entwickelt, ist aber in der Urspungsform weg vom Fenster! Meine Meinung zu goto hatte ich hinreichend und ausreichend mitgeteilt.
    daddeldu! :p



  • berniebutt schrieb:

    daddeldu! :p

    goto Kindergarten;



  • lol da habe ich ja was angerichtet 😃

    War mir über die Auswirkungen meines Programmierstils nicht bewusst. Es stimmt schon, ich habe weniger Erfahrung als ein Schüler im ITG Kurs, und weiss deshalb nicht was "no go" sind. Denke ich werde mich jetzt ransetzen und das ganze mal ohne "goto" üben, danach reden wir dann über den Rest meines "miesen" Programmierstils^^. Denim hat mir ja schon eine Alternative geschrieben, danke dafür.

    MfG
    theflyer


Anmelden zum Antworten