2014-02-25 2 views
0

나는 다음 코드를 가지고있다. 작동하지만, 왜 작동하는지 이해하지 못한다. 내 머리 속에 있으면 안된다. 보시다시피, 저는 두 개의 배열로 작업하고 있는데, array [i]와 array [j]로 배열의 요소를 '잡아 먹고 있습니다'. 배열 [j]의 경우 첫 번째 if와 두 번째 else 만 테스트합니다. 배열 [i]에 대해서는 두 번째 if, 두 번째 else if 및 마지막 else 만 테스트하려고합니다.if, else if, else C의 제어 흐름 Understaing C에서

작성 방법은 매우 우아하지 않습니다. 이 경우 가장 좋은 방법은 무엇입니까? 또한, 나는 C가 True로 평가되면 else 테스트 조건을 중단 했음에도 불구하고. 이 경우, 코드가 첫 번째 else를 true로 평가할 때 코드가 여전히 작동하는 이유는 무엇입니까? 배열 [i]로 계속 테스트하는 것 같습니다. (이것이 내가 어떻게 작동하길 원하는지, 단지 그것이 작동하는 이유를 모르겠습니다).

for (int i = 0, j = 0; i <= numChars; ++i) 
{ 
    int index = j % keyNumChars; 

    if (isupper(argv[1][index])) 
    { 
     // execute code A1 
    } 

    else if (islower(argv[1][index])) 
    { 
     // execute code A2 
    } 

    if (isupper(plainText[i])) 
    { 
     // execute code B1 
    } 

    else if (islower(plainText[i])) 
    { 
     // execute code B2 
    } 

    else 
    { 
     //execute code B3 
    } 
} 
+2

포맷 할 수 있도록 허용 - 당신이 다른 문 뒤에 if 문이 있으므로 상관없이 다른 사람의 결과가있는 경우 다음에 계속됩니다. 두 번째 블록은 if-elseif-else – Andrew

+0

과 처음으로 잘 어울립니다. 논리적 표현의 단축키와 혼동하지 않으시겠습니까? – mvw

답변

1

else는 제 if으로 진행하고, 그 모두가 J의 테스트를 수행한다. 이러한 작업이 완료되면 실행 경로가 두 번째 if으로 시작되고 그 앞에는 else이 없으므로 다시 시작합니다. 두 번째 if, else ifelse이 함께 표시되며 i의 테스트와 관련이 있습니다. 그것은 i 테스트와 j 테스트가 모두 작동하는 이유를 설명해야합니다.

덧붙여서, 코드는 아마도 어떤 시점에서 j를 증가시켜야 할 것입니다. 그렇지 않으면 매번 j = 0을 계속 테스트합니다.

+0

감사합니다. 두 번째 또는 두 번째 else가 true 일 때마다 J를 증가 시키지만 else는 true가 아닙니다. 다른 사람에게 바뀌면 먼저해야 하나? – user3237895

+0

@ user3237895 : 모든 분기가 동일한 루프에 있고 'j'를 증가시키는 코드는 여기에 게시되지 않으며 'i'만 증분됩니다. 그리고'i'는 평상시보다 증가하지 않습니다 (즉, 루프 본문이 실행될 때마다 한번씩) –

+0

죄송합니다. B1과 B2 안에는 각각의 블럭에 + + j가 있습니다. – user3237895

1

나를 당신이 두 가지 블록을 가지고 있기 때문에 그것은 계속

for (int i = 0, j = 0; i <= numChars; ++i) 
{ 
    int index = j % keyNumChars; 

    if (isupper(argv[1][index])) { 
     // execute code A1 
    } else if (islower(argv[1][index])) { 
     // execute code A2 
    } 

    if (isupper(plainText[i])) { 
     // execute code B1 
    } else if (islower(plainText[i])) { 
     // execute code B2 
    } else { 
     //execute code B3 
    } 
} 
+0

이것은 당신에게 도움이된다! 따라서 if를 시작할 때마다 위의 것과 독립적으로 처리됩니다 ... – user3237895

+0

최상위 레벨 if 문은 독립적입니다. 내부 구조체가 위의 구조에서 실패한 경우에만 평가됩니다. 그래서 우리는 외부 구조체에 착륙합니다. 우리가 내부에 충돌 한 경우 등등. 아마도 도움이 될 것입니다. http://www.macs.hw.ac.uk/~ pjbk/pathways/cpp1/node99.html – mvw

관련 문제