3

私はそのコードに取り組んでおり、x + 1代わりに使用しようとしまし++xたが、結果は無限ループになり、画面にゼロが出力されました。

これはコードです:

#include <stdio.h>
int main(void){
  int x;
  for(x = 0; x <= 100; x + 1) //instead of ++x
    printf("%d\t",x);
  return 0;
}

私はこのアクションを不思議に思いました.なぜコンパイラはそのようなエラーを生成しなかったのか、、、そして実際に何が起こるのですか??!! であり、 ?!x++として扱われます。x += 1

4

4 に答える 4

9

変更するには の値が必要です。そうxしないと、ループが終了しません。しかない場合x + 1、反復の最後にx + 1が計算されますが、その結果の値は破棄されます。式の結果はどこにも保存されません。したがってx、ゼロのx <= 100ままであり、真のままであり、ループは永遠に続きます。

次のいずれかがある場合:

x = x + 1
x += 1
x++
++x

xそれ自体の値がインクリメントされます。それが必要です。

于 2013-08-25T09:51:51.120 に答える
6

for ループの基本的な構造は似ていますが、

for(initialization; condition; increment or decrement)

しかし、そのコア部分では、「条件」部分はループの動作を制御するためだけに扱われます。したがって、他の 2 つの部分が構文的に正しい場合、コンパイラはエラーを生成しません。

x+1有効な C ステートメントであり、 の値はx変化しないため、条件 [ x <= 100 => 0 <= 100] が真であるという無限ループに陥ります。

繰り返しますが、x++または両方を単独で使用した場合++xと同様に扱います。x = x + 1しかし、x++実際にはポストインクリメント演算子であり、一方++xはプレインクリメント演算子です。つまり++x、 の値はx最初にインクリメントされ、次に に割り当てられxます。一方、 の現在の値はxステートメント全体で使用され、x++インクリメントxされて新しい値が割り当てられます。次の例を見てください -

    #include<stdio.h>
    void main()
    {
        int x=5;
    /* Post & Pre-Increment used independently */
        x++;
        printf("x : %d", x);

        ++x;
        printf("\nx : %d", x);

    /* Used with printf() statement */
        printf("\nPre-increment of x: %d", ++x);

        printf("\nPost-increment of x: %d", x++);

        printf("\nPost-increment effect on x: %d", x);
    }

出力:

x : 6
x : 7
Pre-increment of x: 8
Post-increment of x: 8
Post-increment effect on x: 9

私の説明で理解していただければ幸いです。それでも理解できない場合は、返信してください。

于 2013-08-25T09:55:38.900 に答える
5

式はfor ループにあるx + 1必要があるため、正しい:x = x + 1

for(x = 0; x <= 100; x + 1) 
                      ^ 
                      doesn't increment x

無限ループ!

なので:

for(x = 0; x <= 100; x = x + 1) 

また

for(x = 0; x <= 100; x += 1)  // or simply x++ or ++x

x + 1は有効な式であるため、コンパイラはそのようなエラーを生成しませんでした(ただし、必要なものではありません)。

したがって、x += 1x++または++xは に 1 を追加するだけでなくx、 の値を変更しますx

于 2013-08-25T09:46:36.790 に答える
1

あなたのアプローチは x の値を確実に増加させるため、完璧ではありませんが、代入に関しては失敗します。したがって、ステートメントはすべての要件をカバーする必要があります。

使ってみてください

#include <stdio.h>
int main(void){
int x;
for(x = 0; x <= 100; x = x + 1)
    printf("%d\t",x);
return 0;
}

またはあなたが使用することができます

#include <stdio.h>
int main(void){
int x;
for(x = 0; x <= 100; x++)
    printf("%d\t",x);
return 0;
}

(ポスト インクリメント)の代わりに、x++プレ インクリメント ( ++x) を使用することもできます。この式は、インクリメントが埋め込まれた代入の省略形であるx = x + 1;としても記述できます。x += 1;増分だけでなく、他の演算子も使用できます。

x -= 3;
x *= 2;
于 2013-08-25T09:52:46.047 に答える