5

次のコードは、エラーや警告を表示せずに実行されます

#include<stdio.h>

int main(){
    int i, j;
    int p = 0, q = 2;
    for(i = 0, j = 0; i < p, j < q; i++, j++){
      printf("HelloWorld\n");
    }
    return 0;
}

ただし、Let Us C (Yashwant Kanetkar)という本には、for ループのテスト式で使用できる式は 1 つだけであると書かれています (この本の 115 ページを参照)。

基準がよくわかりません。for ループのテスト式で複数の式を使用できますか?

編集: 私は確かに 2 つの式を結合することができますが、このWeb サイトで上記のコードを見つけたとき、私は唖然としました。私の質問は、これが有効な C コードかどうかです。

4

5 に答える 5

16

条件

i < p, j < q

は許可されていますが、最初の式の結果を破棄して only の結果を返すため、意図したものではない可能性がありますj < qコンマ演算子は、コンマの左側の式を評価して破棄し、右側の式を評価して返します。

複数の条件をテストする場合は、&&代わりに論理 AND 演算子を使用します

i < p && j < q
于 2013-07-14T10:54:33.117 に答える
7

ブール値と (&&) でそれらをリンクできます

for(i = 0, j = 0; (i < p) && (j < q); i++, j++){

(i < p)i と p が両方とも同じ値 (0)であるため、条件がすぐに失敗するため、上記はループ内に何も出力しません。

更新:あなたの例は有効です(しかしばかげています) C. i=30 を開始すると、カンマ区切りのリストの最初の結果が無視されるため、ループは 2 回実行されます。

于 2013-07-14T10:52:54.900 に答える
3

両方の条件をテストする場合は、&&演算子を使用します。

コードで何が起こっているかは、カンマ演算子の,動作に関連しています。

i < pとの両方j < qが評価されますが、2 番目の式の結果のみがj < qfor ループによってチェックされます。

于 2013-07-14T10:59:19.810 に答える
2
for(i = 0, j = 0; i < p && j < q; i++, j++){
于 2013-07-14T10:54:37.920 に答える
1

私でさえヤシュワント・カネトカール氏のその本を読んだことがあります。for ループでは 1 つの条件のみが許可されると書かれていますが、論理演算子を使用してそれらを接続することで、for ループに複数の条件を追加できます。私が以前に読んだ他の本では、1 つの条件のみが許可されると述べていました。

于 2014-03-15T17:31:03.750 に答える