2014-04-16 2 views
0

프로그램이 두 번째 루프에 들어가면 두 번째 루프의 값을 false로 설정하더라도 무한이됩니다. 문제가 발생하는 곳은 어디입니까? 처음 while 루프는 어떤 문제도 발생하지 않지만 두 번째 것은 ... 어디서 또는 왜 볼 수 없습니다.루프 내부 스위치가 무한이됩니다

int RareData::assignRareType() 
{ 

    int switchType; 
    std::cin >> switchType; 
    bool valid = true; 
    bool valid2 = true; 

    while (valid) 
    { 
     switch (switchType) 
     { 

     case 0: 
      std::cout << "1 - Character Change\n2 - Account Change\n3 - Both\n"; 
      int switchData; 
      std::cin >> switchData; 
      valid2 = true; 

      while (valid2) 
      { 
       switch (switchData) 
       { 
       case 1: 
        valid2 = false; 
        std::cin.clear(); 
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 
        assignCharacter(); 
        break; 
       case 2: 
        valid2 = false; 
        std::cin.clear(); 
         std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 
        assignAccount(); 
        break; 
       case 3: 
        valid2 = false; 
        std::cin.clear(); 
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 
        assignAccount(); 
        assignCharacter(); 
        break; 
       default: 
        std::cout << "Options only range from 1-3\n1 - Character Change\n2 - Account Change\n3 - Both\n"; 
        std::cin.clear(); 
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 
        std::cin >> switchData; 
       } 
      } 
      break; 
     default: 

      std::cin.clear(); 
      std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 
      std::cin >> switchType; 
     } 
    } 
    return 0; 
} 
+1

... 디버거를 사용하십시오. 나는 디폴트 케이스가 항상 실행되고 있는지, 적어도 적어도 valid2는 항상 true인지를 보증한다. –

+1

'valid'를'false'로 설정하지 않으므로 외부 루프가 무한합니다. –

+0

Obvlious 선장님, 제가 필요한 모든 설명이었습니다. –

답변

5

당신은 그러나 valid 여전히 사실이다 falsevalid2을 설정합니다. 따라서 첫 번째 반복문이 계속해서 반복 실행됩니다.

while(valid) == true 
    case 0: 
      get switchdata, set valid2 = true 
       second while loop 
       break 
Repeat because valid is always true, switchtype never changes. 
0

가변 validtrue로 초기화하고 변경되지 않는다, 실제로는 절대 종료하지 않는 while 루프 아닌 제가되도록 다음과 같이 실행 순서이다.