C:Way 从函数的循环中删除多个值

C:Way to remove multiple values from a loop in a function

我需要创建一个文件,即:Earth.txt,然后从循环中放入多个 xy 坐标,然后在打开新文件之前关闭文件,即: Mars.txt 使用新的边界条件并重复(最好不要将文件的创建放入循环中,否则 id 每次都必须手动更改名称以阻止它覆盖以前的数据)。

我找不到将这些值 return 放入我的代码主体并将它们放入文件中的方法。如果我使用 return xreturn y 它会给我最后一个值,无论是在循环内部还是循环外部。

int main (){
    //Earth

    float ex = -147095000000, ey = 0, evx0 = 0, evy0 = -30300.0;

    FILE*outfile;
    outfile=fopen("Earth.txt", "w");
    Integration(ex, ey, evx0, evy0);
    fprintf(outfile,"This is x:%f\n",x);
    fclose(outfile);
}

这是我需要从中提取 x 值的函数:

float Integration(int *x, int *y, float vx0, float vy0){

    double k_1_x, k_2_x, k_1_y, k_2_y, k_1_vx ,k_1_vy, k_2_vx, k_2_vy;
    double dt = 86400; //seconds per day

    int i;

    for (i=0;i<800;i++){
        k_1_x = vx0;
        k_1_y = vy0;

        printf("x1:%f\ny1:%f\nvx1:%f\nvy1%f\n", *x, *y, vx0, vy0);

        return X;
    }

    return 0;
}

我基本上应该将 800 个不同的 x 值打印到我的文件中。

这个

for (i = 0; i < 800; i++) {
    // ...
    return X;  // <- Unconditioned
}

不是循环。正文将只执行一次并返回一个值(无论 X 是什么)(顺便说一句,其他已发布的代码将忽略该值)。

如果我理解了你要完成的任务,你可以将函数改成这样

void Integration(FILE *out, double x0, double y0, double vx0, double vy0)
{
    double k_1_x, k_2_x, k_1_y, k_2_y, k_1_vx ,k_1_vy, k_2_vx, k_2_vy;
    double x = x0, y = y0, vx = vx0, vy = vy0;
    // ...

    for (int i = 0; i < 800; ++i)
    {
        // Update the variables x, y, vx, vy...
        fprintf(out, "%lf %lf %lf %lf\n", x, y, vx, vy);
        //             ^^ Use the correct format specifier for doubles
    }
}

另外你应该把main改成

int main(void)
{
    //Earth
    double ex = -147095000000, ey = 0, evx0 = 0, evy0 = -30300.0;

    FILE *outfile = fopen("Earth.txt", "w");
    if (!outfile)
        // Deal with the error

    Integration(outfile, ex, ey, evx0, evy0);
    fclose(outfile);
    // ...
}