我正在尝试用矩阵编写一个程序。四个数中,只有第一个减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;
}
我缺少什么? 谢谢。
该代码打印:
[2][1][2][1]
[1][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
的末尾;内循环从 i
的索引开始打印 fila
的剩余元素。
请注意,您不应该在循环中重新播种 srand
- 在循环之前只执行一次。
关于C 代码未显示正确的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10763019/