1 | // Sammle solange Zeichen, bis:
|
2 | // * entweder das String Ende Zeichen kam
|
3 | // * oder das aufnehmende Array voll ist
|
4 | while( NextChar != '\n' && StringLen < MaxLen - 1 )
|
Der Kommentar beleuchtet das 'Geschehen' aus der abweisenden
Perspektive. Was muss geschehen, unter welchen Bedingungen wird die
Schleife abgebrochen?
Das while im Code funktioniert aber genau anders rum: Unter welcher
Bedingung wird die while-Schleife ein weiteres mal durchlaufen?
D.h. du musst das, was im Kommentar steht negieren, weil ja von
'abbrechen' auf 'fortsetzen' umgedacht werden muss.
Und da gilt dann De Morgan
1 | nicht( A Oder B ) <==> ( nicht A ) und ( nicht B )
|
wenn du genau schaust, sind die Einzelaussagen dann auch tatsächlich das
genaue Gegenteil:
aus 'entweder das String Ende Zeichen kam' wird 'NextChar != '\n'. Und
das ist das genau Gegenteil.
aus 'das aufnehmende Array voll ist' wird 'StringLen < MaxLen - 1'. Was
ebenfalls die genaue Gegenteilige Aussage darstellt.
Man hätte das ganze auch so schreiben können
1 | while( ! (NextChar == '\n' || StringLen >= MaxLen - 1 ) )
|
dann würde Code und Kommentar praktisch vollständig übereinstimmenm bis
auf das ! da vorne, welches daraus resultiert, dass das while ja wissen
will unter welchen Bedingungen es weiter machen soll, während im
Kommentar steht unter welchen Bedingungen abgebrochen wird.
Nimmt man diese Version und wendet De Morgan an, dann landet man dann
eben bei der Version, wie sie im Tutorial steht.