2012-05-26 33 views
-1

我想用矩陣做一個程序。在四個數字中,只有第一個少於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

爲什麼不使用像'fgetc(stdin)'這樣的跨平臺解決方案而不是使用'system(「pause」)'? –

+0

不錯!但是沒有解決問題 – ignaces

+4

這就是爲什麼我使用了評論,而不是答案。 –

回答

1

您需要兩個嵌套的循環來做到這一點:

#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; 
} 

外循環迭代,直到你得到的fila末;內循環打印起始於索引ifila的其餘元素。

請注意,您不應該在循環中將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; 
} 

注意嵌套循環。尤其是,內循環讓您可以打印矩陣的條目,而無需再次複製/粘貼該代碼 - 您可以消除大量冗餘。