0

コード;

# include <iostream>
# include <windows.h>
using namespace std;

int main () {
    int var1 = 1;
    int var2 = 1;
    bool while1 = true;
    int x = 0;

    while (x < 999) {
        x = x+var1;
        x = x+var2;
        cout << x << " Is the current value of x, how much would you like to add to it?\n";
        Sleep(1000);
        while (while1) {
            int var3;
            cin>> var3;
            if (var3 > 100) {
                cout << "Too large, between 10 and 100\n";
                while1 = true;
            } 
            else if (var3 < 10) {
                cout << "Too small, between 10 and 100\n";
                while1 = true;
            }
            else{
                cout << "Adding " << var3 << " to " << x << "\n";
                x = x + var3;
                cout << "x is now " << x << "\n";
                while1 = false;
            }
        }
    }
}

さて、問題は、最初にループバックした後、2 番目の while ステートメントを完全にスキップして、var1 と var2 だけを x に追加し続けることです。

ここで何が問題なのですか?

4

1 に答える 1

4

変数を にリセットすることはありませんtruewhile (while1) {行の直前など、外側のループのどこかにこれを配置します。

while1 = true;

このままではelseパーツにセットした時点からfalseのままです。または、無限ループ (for (;;)またはwhile (true)) にして、break;の代わりに使用し、他の 2 つの のwhile1 = false;言及を完全に消去します。while1

また、外側のループをループに置き換えることもできforます:

for (int x = 0; x < 999;)

x = x + var1; x = x + var2;これにより、2 つのステートメントも不要になる可能性があります。私はそれを と の観点から保持しvar1ますvar2

for (int x = -var1 - var2; x < 999; x += var1 + var2)

var1またvar2、決して変わらないので、実際に意味がある場合は、それらを作成してconst、その意味を伝える名前に変更することをお勧めします。それ以外の場合はx = x + 2、 、または短くしてx += 2;.

<windows.h>最後に、C++11 を使用する場合は、代わりに標準の sleep 関数を使用して依存関係を取り除くことができます。

#include <thread>
#include <chrono>
...
std::this_thread::sleep_for(std::chrono::seconds(1));
于 2013-05-16T03:14:30.870 に答える