2015-01-30 3 views
0

배열 (nchar[12])이 있는데 "X"로 구성된 세로 열로이 코드를 인쇄했습니다.루프 내에서 상태 시스템 상태 전환

처음 누적 기와 while 루프를 사용하여 버전을 작성했으나 정상적으로 작동했지만 지정된 한도만큼만 열을 인쇄 할 수있었습니다.

그런 다음 상태 시스템으로 쓰려고했지만 출력은 끝이없는 일련의 공백입니다.

나는 다음 int로 상태를 선언하고 여기에 1의 값을 할당 :

while (status = 1) { 
    for (i = 1; i <= 12; ++i) { 
     status = 0; 
     if (nchar[i] > 0) { 
      printf(" X"); 
      --nchar[i]; 
      status = 1; 
     } 
     else 
      printf(" "); 
    } 

그것을 그냥가 마지막으로 처리 된 줄을 인쇄 할 수있는 값을 찾을 수없는 경우 중지해야하지만 영원히 계속되고 나는 왜 이해하지 않는다.

+1

nchar [12]를 선언하면 1에서 12가 아닌 0에서 11까지의 루프가 필요합니다. –

+1

'1'에서 시작하여 위로 올라가는 인덱스 변수 'i'와 루프에 대해 조금 걱정됩니다. to *를 포함하고 * 12를 포함합니다. 나는 배열이 0에서 size - 1까지 인덱싱되기 때문에 걱정이된다. 그래서'nchar'이 크기 12의 배열이면 인덱스는'0'에서'11'으로갑니다. –

+0

문제를 해결하는 방법은 디버거를 사용하는 방법을 배우십시오. 디버거를 사용하여 코드를 한 줄씩 단계별로 실행하여 어떤 일이 발생하는지 확인할 수 있기 때문입니다. –

답변

3

=은 비교 연산자 인 ==이 아니기 때문에 루프가 끝나지 않습니다. 당신이 배열이 선언 한 경우

type nchar[12]; 

는 다음의 유효한 지표가 시작하면 당신은 아마

while (status == 1) 

또는 또한

while (status = 1) 

의 대신 단순히

while (status) 

합니다 0에서 11로 끝납니다. ur 루프는 i=0으로 시작해야하며 i<12이 거짓이 될 때까지 반복해야합니다.

+1

그런 성가신 실수로 다시는 결코 실패하지 않으려면 Yoda-Conditions로 가려고 할 수 있습니다. http://en.wikipedia.org/wiki/Yoda_conditions @maja – alk

+0

감사합니다. 배열에 관해서는 12 개를 썼지 만 배열은 실제로 13으로 설정되었다. 그런 다음 프로그램의 속성 때문에 마지막 12 개 항목을 사용한다. – maja