2017-10-26 12 views
-1

私は希望のサイズに基づいて四角形を作成するプログラムを作成しています。これまでのところ私のコードは値を読み取り、正方形の最上部を印刷しますが、私が作成したネストループのためにサイドを設定する方法についていきます。ここでの問題は、ループが存在するたびにその値をリセットする必要があることです。ネストされたループC++

ここでは、これまでに私のコードです:

#include <iostream> 

using namespace std; 

int main(int,char**) { 
    int x; 
    int z=1; 
    int l=0; 
    int n=0; 
    int q=1; 
    int m=0; 
    int o=0; 
    do{ 
    cout << "Enter length between 0 and 64 (-1 to exit): "; 
    cin >> x; 
    if (x>-1&&x<64){ 
     cout << "+"; 
     for (;x-2!=n;++n){ 
     cout << "-"; 
     } 
     cout << "+" << endl; 
    } 
    else{ 
     cout << "Length must be between 0 and 64 inclusive, or enter -1 to exit."; 
    } 
    do { 
     cout << "|"; 
     do { 
     //cout << " "; 
     //++m; 
     //}while (x-2!=m); 
     cout << "|" << endl; 
     ++o; 
     } 
     while (x-2!=o); 
     ++z; 
    } 
    while (z!=5); 
    } 

プログラムがで巻き込まれる場合コメントアウト部分は、私がMをインクリメントするときのループ、それが上に保持している間、それが何を終了するまでと思われていますそれがインクリメントされた値。私は、ループからの文の区切りを継続し、ループの新しい反復を開始することを知っているが、私はif文を作成した場合でも、do-whileループ内に収まるようにしたいとは思われないような

if (x-2==m){ 
continue; 
} 

どんな助けもありがとう

+2

while(z = 1);は間違っています。 –

+1

"||"はORを意味するので、-1(2000)より大きいか64(-2000)より小さい数字を選ぶことができるので、この部分: '(x> -1 || x <64)'は壊れています。 これをANDにするには '&&'を入れなければなりません。 ここでは、CとC++の演算子について詳しく知ることができます:https://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B –

+0

@PaulRooneyループ関数を修正するために、プログラムを5回実行する必要があります。キャッチがありがとう、またはそれは永遠にループで実行されます。 –

答えて

1

ループの前にちょうどm = 0;を入れてください。

m = 0; 
do { 
    cout << ' '; 
    ++m; 
} while (x-2 != m); 

ループを使用するか、代わりにforループを使用してください。

for (int m = 0; m != x-2; m++) { 
    cout << ' '; 
} 

これにより、1つの場所でのループに関連するすべての条件を見ることができるので、特定の回数、何かを繰り返すため、より一般的なイディオムです。

+0

なぜint定義の配置が重要ですか?この場合、int mはネストされたdo whileループまでは決して扱われませんでした。今は動作しますが、なぜ配置がループに影響を与えたのか分かりません。私は、接続ループの前にintを定義することを一般的にグループ化することから始めるでしょう。それは間違いなくそれらを見るのに役立ちます。感謝するでしょう、ありがとう –

+0

'for'ループのインデックスに使用される変数は、ループの外側では必要ないので、ローカルに宣言します。 – Barmar

関連する問題