orica さんが書きました: ↑6年前
While(条件){} ではない表記ってあるのですね。。
while文の構文は、
C++ では、「while (条件) 文」ですが、
C では、「while (式) 文」です。
C++ の「条件」はちょっと面倒なので、今は説明を控えます。
さて、C の「while (式) 文」を考えてみましょう。
while文は、「式」を評価してその値が 0 でなければ「文」を
実行し、「式」を再評価します。
「式」は、定数、変数、演算子を使った式などです。
コード:
while (1) 文 // 定数 1
while (c) 文 // 変数 c
while (c == 'a') 文 // 等価演算子 ==
while (c >= '0' && c <= '9') 文 // 論理AND演算子 &&
while (isdigit(c)) 文 // 関数呼出し演算子 ()
while (s[i]) 文 // 添字演算子 []
while (c = *p++) 文 // 代入演算子 =
「== や >= や && などの演算子を使った式」を評価した結果の値は、
0 または 1 です。
「文」は、複合文、式文、選択文、繰返し文などです。
コード:
while (c) { a = 1; b = 3; } // { 文の並び } は複合文
while (c) a = 1; // a = 1 は式。a = 1; は式文
while (c) if (b) a = 1; // if から ; までが一つの選択文
while (c) if (b) { a = 1; b = 3; } // if から } までが一つの選択文
複合文の「文の並び」の文は 0個でも 1個でも構いません。
「{ }」は文が 0個の空文ですが、式文の式を省略した「;」も空文です。
orica さんが書きました: ↑6年前
この(条件)部分の式も、str[--i] == '.' という表記も初めて出会いました。。
コード:
if (str[--i] == '.')
は
i = i - 1;
if (str[i] == '.')
と同じです。
コード:
if (str[i--] == '.')
は
int t = i;
i = i - 1;
if (str[t] == '.')
と同じです。