2012-05-26 3 views
-1

매트릭스를 사용하여 프로그램을 실행하려고합니다. 4 개의 숫자에서 첫 번째 행렬 만 더 작음 1. 첫 번째 행렬이 끝나면 두 번째 행렬은 1이 적습니다. 그리고 끝까지갑니다. 0은 허용되지 않습니다. 예를 들어C 코드가 올바른 것을 표시하지 않습니다.

, 내가 코드를 실행할 때,이 반환해야합니다

[2][1][3][3] 
[1][1][3][3] 
[1][3][3] 
[3][3] 
[2][3] 
[1][3] 
[3] 
[2] 
[1] 

을하지만이 코드로 발생되지 않습니다

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

int main() 
{ 
    int fila[4], var; 

    for (var=0;var<4;var++) { 
     fila[var]=0; 
     srand(rand()); 
     fila[var]=rand()%3+1; 
     printf("[%d]",fila[var]); 
     fila[0]=fila[0]-1; 
    } 
    system("pause>NULL"); 


    while(fila[0]>0) 
    { 
     printf("[%d][%d][%d][%d]\n",fila[0],fila[1],fila[2],fila[3]); 
     fila[0]--; 
     system("pause"); 
    } 

    fila[1]=fila[1]-1; 

    while(fila[1]>0) 
    { 
     printf("[%d][%d][%d]\n",fila[1],fila[2],fila[3]); 
     fila[1]--; 
     system("pause"); 
    } 

    fila[2]=fila[2]-1; 

    while(fila[2]>0) 
    { 
     printf("[%d][%d]\n",fila[2],fila[3]); 
     fila[2]--; 
     system("pause"); 
    } 

    fila[3]=fila[3]-1; 

    while(fila[3]>0) 
    { 
     printf("[%d]\n",fila[3]); 
     fila[3]--; 
     system("pause"); 
    } 

    return 0; 
} 

나는 무엇을 누락? 감사합니다. .

그 코드를 인쇄 :

[2][1][2][1] 
[1][1] 
+0

'system ("pause")'를 사용하는 대신'fgetc (stdin)'과 같은 크로스 플랫폼 솔루션을 사용하지 않을까요? –

+0

니스! 그러나 문제를 해결하지 않고 – ignaces

+4

입니다. 그 이유는 대답이 아닌 주석을 사용했기 때문입니다. –

답변

1

당신은 그것을 할 두 개의 중첩 루프를 필요 : 당신이 fila의 끝에 도달 할 때까지

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

int main(void) { 
    int fila[4], i, j; 
    srand(rand()); 
    for (i=0;i != 4; i++) { 
     fila[i]=rand()%3+1; 
    } 
    for (i=0 ; i != 4 ; fila[i]--, i += (fila[i] == 0)) { 
     for (j = i ; j != 4 ; j++) { 
      printf("[%d] ", fila[j]); 
     } 
     printf("\n"); 
    } 
    return 0; 
} 

외부 루프 반복; inner 루프는 i의 인덱스에서 시작하는 fila의 나머지 요소를 인쇄합니다.

루프에 srand을 다시 시드해서는 안되며 루프 전에 한 번만 수행하십시오.

여기는 link to this program on ideone입니다.

+0

완벽하게 작동합니다. 정말 고마워요! – ignaces

0

은 당신이 원하는 것은 다음과 같습니다

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

int main() 
{ 
    int arr[4]; 
    int i; 
    for(i = 0; i < 4; i++) { 
    arr[i] = (rand() % 3) + 1; 
    } 
    for(i = 0; i < 4; i++) { 
    while(arr[i]) { 
     int j; 
     for(j = i; j < 4; j++) { 
     printf("[%d]", arr[j]); 
     } 
     printf("\n"); 
     arr[i]--; 
    } 
    } 
    return 0; 
} 

공지 사항 중첩 된 루프. 특히 inner for 루프를 사용하면 해당 코드를 다시 복사/붙여 넣지 않고도 j 항목을 인쇄 할 수 있습니다. 중복성을 많이 제거 할 수 있습니다.

관련 문제