gpt4 book ai didi

c - 三重嵌套 C 循环,整数迭代器在离开内循环之前变大

转载 作者:行者123 更新时间:2023-11-30 17:39:09 24 4
gpt4 key购买 nike

我已经解决了这个问题,但我不确定我是否明白它来自哪里。我相信这是因为我错误地声明了 par_x par_y 和 par_z (例如 float par_y = [])。我通过使用大小来声明它,然后调用initialize_article来解决这个问题。

出于兴趣,我的代码是 CFD 代码,我向其中添加了更多功能(被动粒子跟踪),但我的三重嵌套循环遇到了问题。

int ii_ter, k_ter, j_ter

void initialize_particle(int d2x, int d2y, int d2z, float *par_x, float *par_y, float *par_z){
for (ii_ter = 0; ii_ter < number_particles; ii_ter++){
for (j_ter = 0; j_ter < number_particles; j_ter++){
for (k_ter = 0; k_ter < number_particles; k_ter++){
// number of particles in each direction, centred around d2x d2y d2z
//
printf("\nvalue ii_ter: %d, j_ter: %d, k_ter: %d\n", ii_ter, j_ter, k_ter);

index_part = k_ter+j_ter*number_particles+ii_ter*number_particles*number_particles;

printf("calc index %d \n", index_part);

par_x[index_part] = 1 + d2x + k_ter - number_particles/(float)2;
par_y[index_part] = 1 + d2x + j_ter - number_particles/(float)2;
par_z[index_part] = 1 + d2x + ii_ter - number_particles/(float)2;

printf("value of parx: %5.5f y: %5.5f z: %5.5f\n", par_x[index_part], par_y[index_part], par_z[index_part]);
}
}
}
}

代码的目的是遍历并在 3D 立方体中放置一个粒子,k_ter 表示 x 轴,y_ter 表示 y 轴,ii_ter 表示 z 轴。

index_part 应从 0 到 number_articles^3

除了我的输出看起来像

value ii_ter: 0, j_ter: 0, k_ter: 0
calc index 0
value of parx: 34.50000 y: 34.50000 z: 34.50000

value ii_ter: 0, j_ter: 0, k_ter: 1
calc index 1
value of parx: 35.50000 y: 34.50000 z: 34.50000

value ii_ter: 0, j_ter: 0, k_ter: 2
calc index 2
value of parx: 36.50000 y: 34.50000 z: 34.50000

value ii_ter: 0, j_ter: 1, k_ter: 0
calc index 3
value of parx: 34.50000 y: 35.50000 z: 34.50000

value ii_ter: 0, j_ter: 1, k_ter: 1
calc index 4
value of parx: 35.50000 y: 35.50000 z: 34.50000

value ii_ter: 0, j_ter: 1, k_ter: 2
calc index 5
value of parx: 36.50000 y: 35.50000 z: 34.50000

value ii_ter: 0, j_ter: 2, k_ter: 0
calc index 6
value of parx: 34.50000 y: 36.50000 z: 34.50000

value ii_ter: 0, j_ter: 2, k_ter: 1
calc index 7
value of parx: 35.50000 y: 36.50000 z: 1108213794.50000

value ii_ter: 1108213760, j_ter: 2, k_ter: 2
calc index 1383989256

我尝试过使用不同的变量甚至 while 循环。甚至注释掉代码的 par_x...par_z 部分。

非常感谢您的帮助。

谢谢

最佳答案

这是一个较晚添加的内容,但与我的评论一致 - 没有全局变量。

#include <stdio.h>

static
void initialize_particle(int d2x, int d2y, int d2z, int num, float *par_x, float *par_y, float *par_z)
{
for (int i_ter = 0; i_ter < num; i_ter++)
{
for (int j_ter = 0; j_ter < num; j_ter++)
{
for (int k_ter = 0; k_ter < num; k_ter++)
{
printf("\nvalue i_ter: %d, j_ter: %d, k_ter: %d\n",
i_ter, j_ter, k_ter);
int index_part = k_ter + j_ter * num + i_ter * num * num;
printf("calc index %d \n", index_part);
par_x[index_part] = 1 + d2x + k_ter - num / 2.0;
par_y[index_part] = 1 + d2y + j_ter - num / 2.0;
par_z[index_part] = 1 + d2z + i_ter - num / 2.0;
printf("value of parx: %5.5f y: %5.5f z: %5.5f\n",
par_x[index_part], par_y[index_part], par_z[index_part]);
}
}
}
}

int main(void)
{
float x[30];
float y[30];
float z[30];
initialize_particle(35, 36, 37, 3, x, y, z);
return 0;
}

这不会崩溃。早期版本用 10 代替 30 确实崩溃了!

关于c - 三重嵌套 C 循环,整数迭代器在离开内循环之前变大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21937709/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com