【发布时间】:2021-05-10 21:18:21
【问题描述】:
请向我解释如何让程序在每次通过循环增加col时重置col。
我想打印由LENGTH 控制的rows 和cols 的X 数量。
代码显然是一团糟,我不得不展开循环。我的问题是实际上如何正确循环???
实际上看起来很简单,但我真的无法理解它。 目前,我要做的就是将输出变为以下内容;
|----------------------------------------------------------------
| row: 0, col: 0| row: 0, col: 1| row: 0, col: 2| row: 0, col: 3|
|----------------------------------------------------------------
| row: 1, col: 0| row: 1, col: 1| row: 1, col: 2| row: 1, col: 3|
|----------------------------------------------------------------
| row: 2, col: 0| row: 2, col: 1| row: 2, col: 2| row: 2, col: 3|
|----------------------------------------------------------------
| row: 3, col: 0| row: 3, col: 1| row: 3, col: 2| row: 3, col: 3|
|----------------------------------------------------------------
到目前为止,它打印出来“一切都很好”(或多或少),但我写它的方式太愚蠢了,显然...... 是的,抱歉像隐士一样编码, 并感谢大家抽出宝贵的时间! 我绝对确定你知道如何做得更好,也许可以解释我在这里缺少什么。
干杯!
float LENGTH = 0.0f;
int row = 0;
int col =0;
int main(int argc, char** argv)
{
LENGTH = 8.0f;
row = 0;
col =0;
for (;row < LENGTH; row++)
{
for (;col <= LENGTH; col++)
{
for (;row < LENGTH; row++)
{
for (;col <= LENGTH; col++)
{
printf("| r:%4i , c:%4i ", row, col);
}
}
printf("\n");
row = 1;
col = 0;
for (;row < LENGTH; row++)
{
for (;col <= LENGTH; col++)
{
printf("| r:%4i , c:%4i ", row, col);
}
}
printf("\n");
row = 2;
col = 0;
for (;row < LENGTH; row++)
{
for (;col <= LENGTH; col++)
{
printf("| r:%4i , c:%4i ", row, col);
}
}
printf("\n");
row = 3;
col = 0;
for (;row < LENGTH; row++)
{
for (;col <= LENGTH; col++)
{
printf("| r:%4i , c:%4i ", row, col);
}
}
printf("\n");
row = 4;
col = 0;
for (;row < GRID_LENGTH; row++)
{
for (;col <= LENGTH; col++)
{
printf("| r:%4i , c:%4i ", row, col);
}
}
printf("\n");
row = 5;
col = 0;
for (;row < LENGTH; row++)
{
for (;col <= LENGTH; col++)
{
printf("| r:%4i , c:%4i ", row, col);
}
}
printf("\n");
row = 6;
col = 0;
for (;row < LENGTH; row++)
{
for (;col <= LENGTH; col++)
{
printf("| r:%4i , c:%4i ", row, col);
}
}
printf("\n");
row = 7;
col = 0;
for (;row < LENGTH; row++)
{
for (;col <= LENGTH; col++)
{
printf("| r:%4i , c:%4i ", row, col);
}
}
printf("\n");
row = 8;
col = 0;
for (;row <= LENGTH; row++)
{
for (;col <= LENGTH; col++)
{
printf("| r:%4i , c:%4i ", row, col);
}
}
printf("\n");
}
}
printf("\n");
return 0;
}
c89 标签在那里,因为程序需要在该配置下运行。
原因是,我的计划是动态分配 多个向量。为此,我不想使用可变长度数组。
假设我们想要创建一个像棋盘或棋盘或类似性质的网格。网格应该以世界为中心(x=0,y=0,z=0)。
所以,如果网格只有LENGTH = 1,那么我们仍然需要 4 个向量来绘制 4 条线,至少要得到一个四边形......
但是,如果函数的用户使用
LENGTH = 1,
那么我们需要在每个长度上加 1
(length +1) 这样当用户使用 LENGTH = 1 调用它时
我们实际上得到了至少 2x2 个向量。
在下面的代码中,我不确定是否应该将 vector 命名为 vector_array,因为我分配了所有我想要的向量。
size_t count = (((length +1) * (length +1)));
float *vector;
vector = NULL;
vector = calloc(count, sizeof(float) * 3);
我的问题是,如何分配向量数组,以及我们退出循环的位置,以便 row 和 col 都像 row = -length 和 col = -length 一样被初始化
请忽略并原谅我,我交替使用了LENGTH 和length。它们的意思是一样的,但应该使用LENGTH 将其初始化为 1...
size_t LENGTH = 0;
int main(int argc, const char * argv[])
{
LENGTH = 8;
float *vector;
vector = NULL;
vector = calloc(3, sizeof(vector));
if (vector == NULL)
{
printf("allocation of vector failed!\n");
exit(0);
}
float **vector_array;
vector_array = NULL;
vector_array = calloc( ((LENGTH+1) * (LENGTH+1)), sizeof(vector));
if (vector_array == NULL)
{
printf("allocation of vector array failed!\n");
exit(0);
}
int row = 0;
int col = 0;
row = (int)-LENGTH;
col = (int)-LENGTH;
while (row < (int)LENGTH)
{
while (col < (int)LENGTH)
{
vector_array[row] = row;
vector_array[col] = col;
col++;
}
row++;
}
row = (int)-LENGTH;
col = (int)-LENGTH;
while (row <= (int)LENGTH)
{
while (col <= (int)LENGTH)
{
printf("c:%d\n", vector_array[col]);
col++;
}
printf("r:%d\n", vector_array[row]);
row++;
}
return 0;
}
我无法更好地解释我尝试做的事情。 我是一个初学者,我把C作为一种爱好......
非常感谢!
【问题讨论】:
-
如果代码正常工作并且您需要反馈或改进建议,那么将问题发布到Code Review 会更合适。如果您有特定问题(例如不正确的输出),请更新问题以提供确切问题的详细信息。
-
如何让程序在每次循环时为我进行重置。我想打印由长度控制的 X 行和列。代码显然是一团糟。我不得不展开循环。我的问题是实际上如何正确循环???
-
展开从未存在过的循环,即...
-
请Edit提供任何更新信息的问题。
-
您为什么将问题标记为 C89?这是故意的吗?您使用的是 30 年前的语言版本吗?