2016-12-30 4 views
-2

for 루프로 인해 작동하지 않는 프로그램이 있습니다. 여기 코드의 작업 조각을 붙여 해요 :이 프로그램이 출력을 제공하지 않는 이유는 무엇입니까?

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    int numLoop = 19; 
    int counter; 
    int maxloops = 25; 
    int takenNum1 = 9, takenNum2 = 14, takenNum3 = 17, takenNum4 = 21, takenNum5 = 24; 

    for (counter=1; counter==maxloops; counter++) 
    { 
     printf("%d \n", counter); 

     if (counter == numLoop) 
     { 
      break; 
     } 

     if (counter == takenNum1 || counter == takenNum2 || counter == takenNum3 || counter == takenNum4 || counter == takenNum5) 
     { 
      counter++; 
      continue; 
     } 
    } 

    return 0; 
} 

예상 출력은 다음과 같습니다 1 2 3 4 5 6 7 8 10 11 12 13 15 16 18 19

아무것도 인쇄되지되고있다.

+0

당신은 모든 경고 및 디버그 정보와 함께 컴파일해야한다 ('gcc가 -Wall -Wextra -g' ... [GCC (http://gcc.gnu.org/)를 사용하는 경우), 코드를 개선 경고 메시지가 나올 때까지 ** 디버거를 사용하십시오 ** ('gdb'). 'for' 루프가 잘못되었습니다. –

+0

귀하의 * fix-my-code * 질문이 주제와 관련이 없습니다. –

+1

지금까지 연구/디버깅 노력을 보여주십시오. 먼저 [Ask] 페이지를 읽으십시오. –

답변

6

for 루프 상태가 버그가 있습니다. counter==maxloops 대신 counter != maxloops을 쓰려고합니다.

그렇지 않으면 루프 조건이 충족되지 않고 루프 본문이 전혀 실행되지 않습니다. 당신의 요구 사항에 따라, 말했다

,

  1. 당신은 무조건 인쇄를 방지하기 위해printf() 문 앞에 검사 블록

    if (counter == takenNum1 || counter == takenNum2 || counter == takenNum3 || counter == takenNum4 || counter == takenNum5) 
    { 
        counter++; 
        continue; 
    } 
    

    를 이동해야합니다. 당신은 출력이 19로 제한 원하는대로

  2. for 루프 조건 정말

    for (counter=1; counter < numloop; counter++) 
             ^^^^^^^^^^ 
    

    처럼 보일 것입니다.

+0

안녕하세요, 시도했지만 작동하지 않는 것 같아요 –

+0

사과, 위의 의견을. 나의 발췌 문장은 그것으로 작업되었지만 원래의 프로그램은 그렇지 않았다. 매우 혼란스러워서 죄송합니다. –

+2

@MythicCocoa이 경우 MCVE를 만들어야합니다. –

1

로직을 확인해야 할 수도 있습니다. 출력이 최대 19 회 반복되어야하는 경우. 또한 카운터를 인쇄하기 전에 inner-if 조건을 확인해야합니다.

다음과 같이 의사 코드를 샘플링하십시오.

for (counter=1; counter<=numLoop; counter++) 
{ 
    if (counter == takenNum1 || counter == takenNum2 || counter == takenNum3 || counter == takenNum4 || counter == takenNum5) 
    { 
     continue; 
    } 
printf("%d \n", counter); 

} 
1

나는 여기서 가르 칠 수있는 순간을 이용하고 싶습니다. 이것은 for 문에서 절을 오해하는 간단한 문제인 것처럼 보입니다. for 문은 초기화 및 "후"코드가 내장 된 while 루프를 작성하는 바로 가기 방법입니다. for 문에는 괄호 목록에 세 개의 절이 있습니다 ((init ; while ; after)). 그래서이 for이 더 많은입니다,

i = 0; 

while(i < 10) 
    { 
    do_something(); 

    i++; 
    } 

당신이 볼 수 있듯이으로 위의 for 루프가 while 루프를 사용하여 다시 작성할 수 있습니다

for(i = 0 ; i < 10 ; i++) 
    { 
    do_something(); 
    } 

로 작성된 for 문으로 예를 사용하자 콤팩트.

+0

두 번째 절의 의미를 잘못 이해했습니다. P –

1

버디 우르 코드가 엉망으로 보입니다. 루핑의 개념을 이해합니다. In for loop 내 말을 들어라.

U는 논리적으로 잘못된 조건을 유지합니다. 루프가 상태를 확인합니다.그리고 카운터가 maxloop와 같아야합니다.이 카운터는 카운터가 값 19 (카운터가 19에 도달 할 때 중단됨)에 도달 할 때 코드가 종료 될 때 ur 코드에서 결코 만족할 수 없습니다. 희망은 첫 번째 부분을 해결합니다.

두 번째로 루프가 깨지는 것은 값을 표시 한 후에 발생해야합니다. 명확한 이해를 위해 아래 코드를 제공했습니다. 희망이 도움이됩니다.

#include <stdio.h> 
#include <stdlib.h> 
int main() 
{ 
int numLoop = 19; 
int counter; 
int maxloops = 25; 
int takenNum1 = 9, takenNum2 = 14, takenNum3 = 17, takenNum4 = 21, takenNum5 = 24; 
for (counter = 1; counter <= maxloops; counter++) 
{ 
if (counter == takenNum1 || counter == takenNum2 || counter == takenNum3 || counter == takenNum4 || counter == takenNum5) 
{ 
continue; 
} 
printf("%d \n", counter); 
if (counter == numLoop) 
break; 
} 
getchar(); 
return 0; 
} 
+0

정확한 영어를 사용하십시오. –

+0

@BobJarvis 제발 이것을 범죄로 생각하지 마십시오. 나는 그것이 비난을위한 공정한 근거라고 생각하지 않는다. 어떤 사람들은 그들의 배경 때문에 영어에 매우 능숙하지 않습니다 (영어는 모국어가 아닙니다). 그는 인도 출신 인 것 같습니다 (많은 사람들이 영어에 능숙하지 않고 개인적인 경험으로 말합니다). –

관련 문제