落書きノート

ふと自分が気になった事を書いてます

C++で問題を解いてる時に起こった出来事

問題は次のコードなんですが。

#include <iostream>

using namespace std;

int main(void){
  int n = 5;
  while(n--){
    cout << n << endl;
  }
  while(n--){
    cout << n << endl;
  }
  return 0;
}

while文で2回デクリメントを使って処理を実行させると、なぜか無限ループに陥ってしまいます。実行結果は以下の通り。

4
3
2
1
0
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
....

普通に考えていくと2回目のwhileは実行されないはずだと思うのですが、実行されてしまっていますね。実行されたなら、-1も表示されるはずなのですが、なぜか表示されてません。

調べて考えてはいましたが、どうだったかなぁと思ってわかりませんでした。g++の固有の問題なのだろうか。VSやBCCなら行けるかなぁ。どうだろう…。

*あれから考えた結果、一回目のループを抜けた後、最後にデクリメントされるということを見落としてました。寝ながら考えてると分かってすっきりしました。なるほど!