2017-10-26 11 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 << ' '; 
} 

당신이 한 곳에서 루프와 관련된 모든 조건을 볼 수 있기 때문에, 특정 횟수 무언가를 반복하는 일반적인 관용구이다.

+0

왜 int 정의의 배치가 중요합니까? 이 경우 int m은 중첩 된 do while 루프까지는 절대 건드리지 않았습니다. 지금은 작동하지만 배치가 루프에 영향을 미친 이유를 모르겠습니다. 루프를 연결하기 전에 정수를 그룹화하는 규범으로 사용하기 시작합니다. 확실히 볼 수 있습니다. 어떤 안내라도 감사 할 것이다. –

+0

for 루프를 색인하는 데 사용되는 변수는 루프 외부에서 필요하지 않으므로 로컬로 선언해야한다. – Barmar