C代码没有显示正确的内容

C代码没有显示正确的内容,c,C,我想用matrix做一个程序。在四个数字中,只有前一个小于1。当第一个矩阵结束时,只有第二个矩阵小于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> in

我想用matrix做一个程序。在四个数字中,只有前一个小于1。当第一个矩阵结束时,只有第二个矩阵小于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;
}

您需要两个嵌套循环来执行此操作:

#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;
}
#包括
#包括
#包括
内部主(空){
int fila[4],i,j;
srand(rand());
对于(i=0;i!=4;i++){
fila[i]=rand()%3+1;
}
对于(i=0;i!=4;fila[i]--,i+=(fila[i]==0)){
对于(j=i;j!=4;j++){
printf(“[%d]”,fila[j]);
}
printf(“\n”);
}
返回0;
}
外部循环不断迭代,直到到达
fila
的末尾;内部循环从索引
i
开始打印
fila
的其余元素

请注意,您不应该在循环中重新设定
srand
——在循环之前只执行一次


以下是您想要的。

如下所示:

#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;
}
#包括
#包括
int main()
{
int-arr[4];
int i;
对于(i=0;i<4;i++){
arr[i]=(rand()%3)+1;
}
对于(i=0;i<4;i++){
while(arr[i]){
int j;
对于(j=i;j<4;j++){
printf(“[%d]”,arr[j]);
}
printf(“\n”);
啊(我),;
}
}
返回0;
}

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

与其使用
系统(“暂停”)
,不如使用跨平台解决方案,如
fgetc(stdin)
?很好!但这并不能解决问题这就是为什么我使用了注释,而不是答案。你能展示一下你的代码在打印什么吗?@user1178392我甚至不理解你的问题的描述,你能试着更好地解释自己并且语法正确吗?非常好用,谢谢!
#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;
}