C代码没有显示正确的东西

时间:2012-05-26 01:42:42

标签: c

我正在尝试用矩阵做一个程序。在四个数字中,只有第一个少于1.当第一个矩阵完成时,只有第二个matris减少1.并且一直到最后。不允许使用0号。

例如,当我运行代码时,需要返回:

[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]

2 个答案:

答案 0 :(得分: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的末尾;内部循环从fila索引开始打印i的其余元素。

请注意,您不应该在循环中重新播种srand - 在循环之前只执行一次。

这是link to this program on ideone

答案 1 :(得分: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;
}

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