-3

コード 1:

i = 0;
while ( arr[i++] != EOF )
     printf("%d", i);

出力: 1 2 3 4

コード 2:

i = 0;
while ( arr[i] != EOF )
{
      printf("%d", i);
      i++;
}

出力: 0 1 2 3

上記のコードでは、arr[] = "//\n\0"

ただし、i ++は最初にiを割り当てて右にインクリメントする必要があると思いますか?

つまり、

if i = 1
j = i++
j = 1 (Not 2)

では、コード 1 で正確に何が起きていて、なぜコード 2 のように振る舞わないのでしょうか?

4

3 に答える 3

2

iこれを行うとインクリメントarr[i++]するので、もちろん印刷するときはすでにインクリメントされています。

代わりに、配列要素を出力して、正しいものを取得したことを確認します。

i = 0;
char c;
while ( (c = arr[i++]) != EOF )
     printf("%c", c);
于 2012-12-21T19:42:30.837 に答える
1

...多分私はあなたの質問の要点を逃していますが、:

So, what exactly is happening in code 1 and why it isn't behaving like code 2?

i++押すと、インクリメントされ、その新しい値が に保存されiます。そう:

i = 0;                     // i = 0
while ( arr[i++] != EOF )  // i = 1, 2, etc now before the print
     printf("%d", i);      // the incremented i is printed

i = 0;                     // i = 0
while ( arr[i] != EOF )  
{
      printf("%d", i);     // i still = 0 and that's printed
      i++;                 // now i = 1, 2, etc
}

インクリメント (前または後) が実行される行が実行されると、i++vsについて尋ねている場合、新しい値が保存されます。++iしたがって、最初のケースでは while チェック中にインクリメントが行われるため、その時点で保存されます。

于 2012-12-21T19:43:04.700 に答える
0

さて、コードではi、インクリメント後に出力します。

ループ条件の直後に、iがインクリメントされて 1 になります。印刷時には、iは既にインクリメントされています。そのため、コード 2 と比較すると印刷が異なります。

于 2012-12-21T19:42:29.793 に答える