Problem mit while-Schleife in C

cmdrdata

Lieutnant
Mitglied seit
21.12.2002
Beiträge
97
Renomée
0
Hallo,

ich hab ein kleines Verständnisproblem bei einer while-Schleife in C, ich versuch gerade den Code nach Java zu portieren. Kann mir jemand sagen, was es mit der Bedingung der äußeren while Schleife auf sich hat(while (n--))?
An der Stelle wo die Funktion stir aufgerufen wird, wird für n der Wert 1 übergeben. Ist das eine Endlosschleife oder wann wird abgebrochen? Wieso funktioniert das überhaupt, sollte dort nicht ein boolescher Ausdruck stehen?

Code:
void
stir (int n)
/* this stirs up the brew by exchanging n random key pairs */
{
  int i, j;
  int temp;
  if (n < 0)
    return;
  while (n--)
    {
      i = rand () % 25;
      do
	j = rand () % 25;
      while (j == i);
      temp = mysquare.key[i];
      mysquare.key[i] = mysquare.key[j];
      mysquare.key[j] = temp;
    }
}
 
Boolsche Ausdrücke liefern üblicherweise einen Integer als Ergebnis. Ungleich 0 für wahr, null für falsch. Entsprechend wird das auch interpretiert. Solange n-- also ungleich 0 zurückgibt, wird die while-Schleife wiederholt.
 
Danke Dir. Ist das eine Eigenheit in C? Mir ist in Java und damals in Pascal noch niemals eine solche Bedingung aufgefallen.
 
Keine Ahnung... Java müsste das eigentlich auch akzeptieren. Versuch doch einfach mal sowas wie "int i=(1==2); cout << i;" in anderen Sprachen umzusetzen.
 
Keine Ahnung... Java müsste das eigentlich auch akzeptieren. Versuch doch einfach mal sowas wie "int i=(1==2); cout << i;" in anderen Sprachen umzusetzen.

Nee geht nicht wegen strong typing (oder wie das heißt). Evtl mit nem expliziten cast nach bool gehts.
 
Danke Dir. Ist das eine Eigenheit in C? Mir ist in Java und damals in Pascal noch niemals eine solche Bedingung aufgefallen.
Soweit ich weiß ja. Jeder Wert ungleich 0 wird als wahr interpretiert. Liegt daran dass es in C kein bool gibt.

in while-Schleifen in Java kannst du wohl nur true/false Werte angeben wie while(i<=12){ ... i++;}

edit: gerade mal ausprobiert: Java fordert in while den Typ boolean also true/false oder Methoden die einen Boolean zurückliefern.
 
Zuletzt bearbeitet:
Danke Dir. Ist das eine Eigenheit in C?

Bis vor kurzem ja. Ab dem C99-Standard gibt es auch in C einen Boolean Typ. Allerdings dürfte diesen Standard bis jetzt so gut wie kein Compiler implementieren, und das schon garnicht vollständig.
Boolean wird dort aber auch "nur" via #define auf 0 (false) und 1 (true) abgebildet. C++ hingegen kennt Boolean als direkten Sprachbestandteil.
 
Zuletzt bearbeitet:
Zurück
Oben Unten