C:Way 从函数的循环中删除多个值
C:Way to remove multiple values from a loop in a function
我需要创建一个文件,即:Earth.txt
,然后从循环中放入多个 x
和 y
坐标,然后在打开新文件之前关闭文件,即: Mars.txt
使用新的边界条件并重复(最好不要将文件的创建放入循环中,否则 id 每次都必须手动更改名称以阻止它覆盖以前的数据)。
我找不到将这些值 return 放入我的代码主体并将它们放入文件中的方法。如果我使用 return x
或 return 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);
// ...
}
我需要创建一个文件,即:Earth.txt
,然后从循环中放入多个 x
和 y
坐标,然后在打开新文件之前关闭文件,即: Mars.txt
使用新的边界条件并重复(最好不要将文件的创建放入循环中,否则 id 每次都必须手动更改名称以阻止它覆盖以前的数据)。
我找不到将这些值 return 放入我的代码主体并将它们放入文件中的方法。如果我使用 return x
或 return 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);
// ...
}