2012-05-26 31 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; 
} 

注意嵌套循环。尤其是,内循环让您可以打印矩阵的条目,而无需再次复制/粘贴该代码 - 您可以消除大量冗余。