0

よし、初心者、落ち着け。ありがとう。

#include <iostream>
#include <windows.h>

using namespace std;
int main()
{

    int x = 0;
    bool while1 = true;
    while (while1)
    {
        cout << x << "\n";
        sleep(200);
        if (x < 10)
        {
            while1 = true;
        }
        else if (x >= 10)
        {
            while1 = false;
        }
        x = x+1;
    }
    cin.get();
}

さて、x に 1 を加える前に if ステートメントで x < 10 かどうかをチェックしているのに、なぜプログラムが x を 10 にするのか理解できません... 説明してください。

4

6 に答える 6

5

操作の順序は次のとおりです。

  • 1) 3) x が >= 10 であることがわかった場合 (while1が falseの場合)、ループを停止します。
  • 2) プリントアウト x
  • 3) ここで x >= 10 かどうかを確認し、そうwhile1であれば falseに設定します。
  • 4) インクリメント x

x が 9 の場合、次のように処理します。

  • ループを止めない (while1本当です)
  • プリントアウト 9
  • x はまだ >= 10 ではなく、while1trueに設定されています
  • x は 10 にインクリメントされます
  • ループを止めない (while1本当です)
  • プリントアウト 10
  • x は >= 10 になり、 while1falseに設定されます
  • x は 11 にインクリメントされます
  • while1false に設定されているため、ループを停止します

したがって、x は 10 のときに出力されます。問題は、チェックしてチェックに基づいて実行する方法では、停止する前に 1 つのループを実行しすぎることです。

これを修正する1つの方法は

while (x < 10)
{
    cout << x << "\n";
    Sleep(200);
    x = x+1;
}

これで、ループは、直後のパスではなく、x が 10 である同じパス スルーでは実行されません。

さらに良いのはこれです:

for (int x = 0; x < 10; ++x)
{
    cout << x << "\n";
    Sleep(200);
}

xの増分値をループするという意図については、どちらがより明確です。

于 2013-05-03T05:33:37.680 に答える
0

が の外部で発生xする10ため、プログラムはに到達します。 したがって、ループの 1 回の実行中にチェックが行われ、x が 10 未満の場合はtrue になります。それ以外の場合はfalse になります。その後はいくらでも増えます。が true の場合、このプロセスを繰り返します。x = x + 1if
while1while1xwhile

于 2013-05-03T05:32:50.543 に答える
0
else if (x >= 10)
{
    while1 = false;
}
x = x+1;

私はこの質問を次のように理解しています:なぜ x は 10 になるのですか? これは正しいです?

while1をfalseに設定しても、whileループはすぐには終了しません。もちろん、x はそれをチェックした後に増加するため、ループを終了した後は 10 に等しくなります。したがって、このコード セグメントの後で x は実際には 11 になります。

于 2013-05-03T05:36:06.640 に答える
0

x >= 10 の後に x を出力したくない場合は、x をインクリメントした後にチェックを行います。

#include <iostream>
#include <windows.h>

using namespace std;
int main(
{
    int x = 0;
    bool while1 = true;
    while (while1)
    {
        cout << x << "\n"
        x++;
        Sleep(200);
        if (x < 10)
        {
            while1 = true;
        }
        else if (x >= 10)
        {
            while1 = false;
        }
    }
    cin.get();
}
于 2013-05-03T05:37:12.587 に答える