Einsteiger-Verständnisfrage: Völlig kryptischer Code



  • Ja, danke! While-do löschte ich soeben, das stammt ja aus C#.

    Ich werde jetzt mit Deinen Hinweisen versuchen, den Code noch etwas weiter zu „zerpflücken“, bis er in eine für Maschine und Mensch (mich) verständliche Form annimmt.

    Edit: Schon die zweite Antwort, danke also an Euch beide!



  • C-Laie schrieb:

    Ja, danke! While-do löschte ich soeben, das stammt ja aus C#.

    Wie bitte? Das gibts auch in C# nicht.



  • Es ist wie verhext: Kaum fragte ich, funktioniert es. Also

    while (k<len && a[k]==nil) ++k;
    

    funktioniert nunmehr ebenso wie

    while (k<len && a[k]==nil) k++;
    

    Da saß mir immer noch C# im Nacken.

    Unklar ist mir aber immer noch, warum

    do k++ while(k<len && a[k]==nil);
    

    vom Compiler abgelehnt wird. Das ist jetzt mehr rhetorisch gefragt, weil ich die Antwort darauf nicht benötige, aber vielleicht ist das ja auch noch ganz einfach - mit wenigen Wörtern - klärbar.

    Nochmals danke!

    C-Laie



  • HighLigerBiMBam schrieb:

    C-Laie schrieb:

    Ja, danke! While-do löschte ich soeben, das stammt ja aus C#.

    Wie bitte? Das gibts auch in C# nicht.

    Dann bitte ich um Nachsicht: Dann war mir das noch von Pascal in Erinnerung.

    Es ist eben keinesfalls von Vorteil, sich mit mehreren Programmiersprachen zu beschäftigen, weil man immer mehr durcheinanderbringt. Ist zumindest bei mir so - ein Beobachtung, die ich im übrigen auch bei natürlichen Sprachen machte.



  • Weil bei k++ das Semikolon fehlt.



  • C-Laie schrieb:

    do k++ while(k<len && a[k]==nil);
    
    do 
      k++; 
    while(k<len && a[k]==nil);
    
    do k++; while(k<len && a[k]==nil);
    


  • Ja, der Apostroph fehlte, nunmehr ist es mir klar, danke!

    Wie gesagt, je mehr Programmiersprachen, desto schlimmer wird es. Leider war bei der Compilermeldung „Statement missing ;“ das Apostroph nur allzuleicht zu übersehen.

    Danke, danke!



  • Das Semikolon wird aber traurig, wenn Du es Apostroph nennst.



  • volkard schrieb:

    Das Semikolon wird aber traurig, wenn Du es Apostroph nennst.

    🙂



  • Strich Punkt!? 😛



  • Ihr werdet es vielleicht nicht glauben, aber das fiel mir heute nacht (!) von allein ein, daß ich das arme Semikolon evtl. auch noch falsch titulierte. Gestern war aber auch wirklich sehr wenig mit mir los - Asche auf mein Haupt!



  • Wenn das Apostroph runterfällt und deswegen ein Suchflieger startet, um es zu suchen, könnte sich kurzzeitig die Konstellation ergeben, dass es wie ein Semikolon aussieht:

    t0: ´
    t1: ·
    t2: ,
    t3: ,     ·    
    t4: ,    ·
    t5: ,   ·
    t6: ,  ·
    t7: , ·
    t8: ,·
    t9: ;
    


  • C-Laie schrieb:

    Es ist wie verhext: Kaum fragte ich, funktioniert es. Also

    while (k<len && a[k]==nil) ++k;
    

    funktioniert nunmehr

    Der Code ist aber nicht äquivalent. Beim Original, hier nochmal zur Erinnerung

    while (++k<len && a[k]==nil);
    

    wird k bereits vor dem ersten Schleifendurchlauf einmal inkrementiert. Du machst also jetzt einen Durchlauf mehr. Und wenn das erste k (k=0 nehme ich an, aber das hast du nicht mitgeteilt) die Bedingung bereits wahr werden lässt, dann ist das auch das Ergebnis, was im Original nicht der Fall wäre. Äquivalent wäre

    k++;
    while (k<len && a[k]==nil) k++;
    

Anmelden zum Antworten