Was ist der Unterschied zwischen c beide Texte



  • hallo was ist der Unterschied zwische denn beiden Texten

    for schleife:

    Falls Sie als Entwickler bereits wissen, wie oft die Anweisungen wiederholt
    werden sollen, verwenden Sie am besten die for-Schleife. Ebenso verfahren
    Sie, falls es sich um eine Wiederholung bezüglich einer bereits bekannten,
    regelmäßig aufgebauten Zahlenreihe handelt. Dies kann zum Beispiel die
    folgende Zahlenreihe sein: 10, 20, 30, … 130, 140, 150.

    while, do-while:
    Falls sich allerdings erst im Verlauf des Programms herausstellt, ob und wie
    häufig die Anweisungen wiederholt werden sollen, nutzen Sie am besten
    die while-Schleife oder die do-while-Schleife. Bestimmte Eingaben des
    Benutzers können zum Beispiel dazu führen, dass eine Schleife fortgesetzt
    wird oder eben nicht. Dies können Sie als Entwickler vorher nicht wissen



  • Der eine fängt mit for an, der andere mit while.



  • @sami12 sagte in Was ist der Unterschied zwischen c beide Texte:

    hallo was ist der Unterschied zwische denn beiden Texten

    Die for-Schleife sollte immer dann genutzt werden, wenn vor dem Eintritt in die Schleife feststeht wie oft sie durchlaufen werden wird. Bei den beiden anderen Schleifen wird vor dem Durchlauf eine Bedingung getestet, und bei der anderen nach dem Durchlauf getestet, ob weitere Schleifendurchläufe erfolgen sollen. Und das versucht der zitierte Text auch auszudrücken.



  • @john-0 sagte in Was ist der Unterschied zwischen c beide Texte:

    Die for-Schleife sollte immer dann genutzt werden, wenn vor dem Eintritt in die Schleife feststeht wie oft sie durchlaufen werden wird.

    Ja, Neee. Alle Verallgemeinerungen sind falsch.

    Man kann jede for-Schleife als eine do-while-Schleife schreiben (oder while) und umgekehrt. Und all das kann man auch als Conditional Jump schreiben wenn einem langweilig ist. Das ist mehr eine Frage der Ästhetik. Die von Dir @sami12 wiedergegebene Aussagen sind aber beides Quatsch mit Sauce:

    for (int value; scanf("%d", &value) == 1; /* do something with value */);
    

    ist mindestens genauso kosher wie

    int value;
    while (scanf("%d", &value) == 1)
        /* do something with value */ ;
    

    und da die for-Schleife nicht unnötig den umgebenden Scope mit einer zusätzlichen Variable (value) verseucht, wäre sie sogar vorzuziehen (obwohl zur compile-time nicht feststeht wie oft der Schleifenkörper ausgeführt werden wird).

    Der Vollständigkeit halber:

    int value;
    if (scanf("%d", &value) == 1) {
        do {
            /* do something with value */ ;
        } while (scanf("%d", &value) == 1);
    }
    else {
        // no values
    }
    

    oder:

        int value;
        if (scanf("%d", &value) != 1)
            goto error;
    collect:
        if (scanf("%d", &value) == 1)
            goto collect;
        // do something with value, jump to success
    error:
        // no values
    success:
        // go on with program flow
    

    Letztes Beispiel wird man in Hochsprachen selten bis nicht antreffen (und wenn doch den Autor windelweich prügeln), ist aber in Assembler (die Struktur betreffend) gang und gäbe.

    Aber - "schönes" C++:

    std::vector<int> values{ std::istream_iterator<int>{ std::cin }, std::istream_iterator<int>{} };
    

    ich sehe da keine Schleife.

    Langer Rede kurzer Unsinn (wenn C++ eine Option ist):
    Wenn Du den Schleifenkörper in eine Funktion packen kannst dann tu es und verwende std::transform().



  • @Swordfish Ein Anfänger in C, der Fragen zu for und while hat, wird den C++ Kram nicht verstehen.



  • @DirkB Uuuuups, C-Forum. Ich schreib's um. // done.



  • @Swordfish sagte in Was ist der Unterschied zwischen c beide Texte:

    Ja, Neee. Alle Verallgemeinerungen sind falsch.

    Es ging um groben Leitpfaden für einen C-Anfänger, und Du textest ihn mit C++ Beispielen zu, und auch noch welchen, die man unter „best practices“ garantiert als Negativbeispiele aufführen würde, wie man es nicht machen sollte. Und nein, nur weil der Compiler es akzeptiert, wird es nicht zu guten Code. C krankt ohnehin an der Problematik, dass man verschachtelte for-Schleifen nur mit goto verlassen kann.



  • @john-0 sagte in Was ist der Unterschied zwischen c beide Texte:

    Du textest ihn mit C++ Beispielen zu, und auch noch welchen, die man unter „best practices“ garantiert als Negativbeispiele aufführen würde

    In der Originalfassung des Posts sind die ersten beiden Beispiele sicher keine "Negativbeispiele" in C++ gewesen und auch jetzt sind sie keine "Negativbeispiele" in C. Außerdem steht vor den Beispielen 3 und 4 "der Vollständigkeit halber" und darunter, daß man für soetwas in einer Hochsprache totgeprügelt werden kann. Du kannst Dich also wieder abregen.

    @john-0 sagte in Was ist der Unterschied zwischen c beide Texte:

    C krankt ohnehin an der Problematik, dass man verschachtelte for-Schleifen nur mit goto verlassen kann.

    So ein Quatsch. Das geht genausogut mit einem Flag oder man packt die innere Schleife in eine Funktion.

    @john-0 sagte in Was ist der Unterschied zwischen c beide Texte:

    Und nein, nur weil der Compiler es akzeptiert, wird es nicht zu guten Code.

    Da, fang: <°)))<(



  • @sami12 Zwischen einer for und while Schleife gibt es in C eigentlich keinen Unterschied.

    (Seit C99 kannst du bei der for-Schleife den Scope (Sichtbarkeit) der Laufvariablen auf die Schleife begrenzen)

    Daher gibt es die Konvention, dass man die for-Schleife nimmt, wenn man die Anzahl der Durchläufe vor Schleifenbeginn kennt.
    Z.B. die Anzahl Elemente in einem Array.

    Die while-Schleife nimmt man, wenn die Abbruchbedingung erst in der Schleife selber ermittelt wird.
    Z.B. Stringende, Genauigkeit einer Berechnung ist erreicht, Benutzereingabe.

    Dieser Konvention muss man aber nicht folgen.



  • @DirkB sagte in Was ist der Unterschied zwischen c beide Texte:

    Daher gibt es die Konvention, dass man die for-Schleife nimmt, wenn man die Anzahl der Durchläufe vor Schleifenbeginn kennt.

    Worauf bezieht sich dieses "Daher"? Macht überhaupt keinen Sinn. Ob ich eine while- oder eine for- schleife nehme hat null, nix, gaga, niente damit zu tun ob die Abbruchbedingung konstant ist oder nicht.



  • @john-0 sagte in Was ist der Unterschied zwischen c beide Texte:

    C krankt ohnehin an der Problematik, dass man verschachtelte for-Schleifen nur mit goto verlassen kann.

    mal unabhängig davon, dass man bei sauberer programmierung auch wirklich ohne goto auskommt, ist es ja grundsätzlich auch kein problem, in solchen fällen goto zu benutzen.

    aber ich hab hier irgendwann mal ein einfaches programm mit goto als negativbeispiel gepostet (guck zur not halt mal im verlauf oder benutz die suche. schade, dass ich keinen eyetracker habe......) und die anweisung, kein goto zu verwenden, hat eben den zweck, genau solche programmierstile zu vermeiden.



  • @DirkB du hast total Recht Dirk.



  • ich komme nicht weiter, ich lernen gerade c, und kenne diese Sachen noch nicht



  • welche sachen?



  • @Swordfish sagte in Was ist der Unterschied zwischen c beide Texte:

    In der Originalfassung des Posts sind die ersten beiden Beispiele sicher keine "Negativbeispiele" in C++ gewesen und auch jetzt sind sie keine "Negativbeispiele" in C.

    Dein Posting enthält noch immer C++ Code. Wie wäre es einfach mal Rücksicht zu nehmen auf den Empfänger der Nachricht (einen Anfänger in C) zu nehmen, und die korrekte Verwendung der drei Schleifen zu zeigen, und eben nicht die Äquivalenz der drei Schleifenkonstrukte (eine Trivialität für jeden erfahrenen Programmierer) zu zeigen, und damit eher noch mehr Verwirrung als Klarheit zu schaffen. Meinst Du ernsthaft dies sei hilfreich?



  • @john-0 sagte in Was ist der Unterschied zwischen c beide Texte:

    Dein Posting enthält noch immer C++ Code.

    Ja, 1 (in Worten: eine) Zeile.

    @john-0 sagte in Was ist der Unterschied zwischen c beide Texte:

    Meinst Du ernsthaft dies sei hilfreich?

    Lass das doch bitte den Adressaten entscheiden!?

    Da der OP gefragt hat wie zwei Aussagen einzuordnen sind ist es wohl nur logisch daß man eben auf diese eingeht und ggf. wie hier zeigt das sie quatsch sind.

    Alter, mt verlaub, wenn ich mit Dir zusammenarbeiten müsste, ich würde mir die Kugel geben. Dein einziger Beitrag in diesem Thread besteht darin rumzumotzen, wie fast in jedem Thread an dem Du Dich beteiligst.



  • @Wade1234 sagte in Was ist der Unterschied zwischen c beide Texte:

    mal unabhängig davon, dass man bei sauberer programmierung auch wirklich ohne goto auskommt, ist es ja grundsätzlich auch kein problem, in solchen fällen goto zu benutzen.

    In C? Da wirst Du ein Problem mit dem Error Handling haben. Das Problem der verschachtelten Schleifen lässt sich wie gesagt nur mit goto lösen, oder in dem man den Code so umorganisiert, dass man andere Probleme bekommt, weil man Dinge aus dem Kontext reißt.



  • @john-0 Zeig ein Beispiel wo Du meinst goto zu brauchen und ich zeige Dir wie es ohne geht ^^



  • @john-0 genau john, ich lasse diese Frage.



  • @sami12 sagte in Was ist der Unterschied zwischen c beide Texte:

    ich komme nicht weiter, ich lernen gerade c, und kenne diese Sachen noch nicht

    Es wäre Dir vielleicht hilfreich zu verraten, wo genau Deine Verständnisprobleme liegen.


Log in to reply