2014-04-04 11 views
0

나는 극장의 2D 배열을 만드는 프로그램을 가지고있다. 사용자는 위치별로 좌석을 선택할 수 있으며 화폐 금액은 0으로 변경되어 좌석을 가져 갔음을 나타냅니다. 좌석을 선택하는 다른 방법은 가격별로 선택합니다. 따라서 사용자가 가격을 입력하면 for 루프는 배열을 반복하고 해당 가격의 첫 번째 인스턴스를 찾아서 0으로 대체 한 다음 중지합니다. 아니면 적어도 내가하려고했던 것입니다. 실제로,이 값들은 모두 0으로 바뀌 었습니다. 조건이 충족되면 while 루프를 사용하여 닫았지만 작동하지 않았습니다. 여기에 내 (관련) 코드가 있습니다.2D 배열에서 가격으로 검색 하시겠습니까?

while (flag == true) 
    { 
     cout << "\n"; 
     cout << "You may select tickets by seat or by price. Enter 1 to select by price, or 2 to select a seat. Enter 3 if you'd like to quit." << endl; 
     cin >> userSelection; 

     if (userSelection == 1) 
     { 
      cout << "What price would you like to search for? " << endl; 
      cin >> priceSelection; 
      while (searchFlag == true) 
      { 
       for (int i = 0; i < 9; i++) 
       { 
        for (int j = 0; j < 10; j++) 
        { 
         if (Theater [i][j] == priceSelection) 
         { 
          Theater [i][j] = 0; 
          searchFlag = false; 
         } 
        } 
       } 

       for (int i = 0; i < 9; i++) // This for loop is going to output our array so the user can see pricing. 
       { 
        for (int j = 0; j < 10; j++) 
        { 
         cout << Theater [i][j] << " "; 
        } 
        cout << "\n"; 
       } 
      } 

     } 

정말로 무엇이 변경되어야하는지 확실치 않아서 첫 번째 가격이 발견되고 변경된 후에 중단됩니다. 또한 필요한 경우 나머지 코드를 복사하거나 붙여 넣을 수도 있습니다.

+0

왜이 2D (1D는 문제를 피할 수 있습니까?)입니까? –

+0

행과 열의 좌석이 있으므로 사용자를 위해 하향식 시각적으로 표시해야합니다. – Santa

+0

문제의 일부는 searchFlag가 for 루프 * 밖에서 만 점검된다는 것입니다. for 루프는 searchFlag를 다시 검사하기 전에 항상 완료됩니다. – aardvarkk

답변

0

while 루프는 for 루프 외부에 있으므로 while 루프로 돌아 가기 전에 모든 대체가 완료됩니다. 당신이 @Dieter Lücking 제안을 사용하고 단지 1 차원 배열을 사용하는 경우는 2 차원 배열의 경우 여전히, 그냥 그 두 가지를 취할 것 while 루프 방법을 사용할 수 있습니다 하나

int i =0; 
while (searchFlag == true) 
{ 
    // ..check for seats 
    if (seatFound) 
    { 
     searchFlag = false; 
    } 
    i++; 
} 

루프 동안이 작업을 수행 할 수 있습니다.

2

미래에 대한 그냥 조언,

(i < 9) 루프 종료 조건을 하드 코딩하지 마십시오. 배열의 현재 길이 또는 좌석 수를 지정하십시오. 그렇게하면 더 많은 것을 추가 할 수 있습니다.

if 문에서 검색 플래그를 false로 설정하더라도 모든 for 루프를 계속 진행합니다. 따라서 매번 모든 좌석을 반복 할 것입니다. 현재 좌석의 가격이 사용자가 입력 한 가격과 일치하지 않으면 무한 루프가됩니다.

for (int j = 0; j < someCurrentLengthOfArray && searchFlag; j++) 

에 당신은 가격이 일치하는 경우는 배열의 지정되지 않은 끝을 머리 있는지 확인합니다 그 방법을 루프 내면을 변경해보십시오.

의견 중 하나에서 언급했듯이 왜 2D 배열입니까?

루프에 대한
1

변화 당신을 :

for (int i = 0; i < 9 && searchFlag; i++) 
{ 
    for (int j = 0; j < 10 && searchFlag; j++) 
    { 
     if (Theater [i][j] == priceSelection) 
     { 
       Theater [i][j] = 0; 
       searchFlag = false; 
     } 
    } 
} 

그들은 지금 방법, 그들은 상관없이,이 끝날 때까지, 반복하는을 통해 지킬 수 있습니다. 위와 같이하면 searchFlag가 true로 설정된 경우 중단되고 outer while 루프로 되돌아 가면 파열됩니다.

관련 문제