我有一个函数,它采用一堆粒子的速度矩阵并尝试计算粒子的总动能。
它没有给我正确的值。为了调试,我在函数中添加了一些 printf("value: %e\n", energy)
。
现在,返回值取决于我未注释的 printf
数量。
double GetKineticEnergy(int dim, int nParticles, double vel[nParticles][dim], double mass)
{
int i,j;
double sum;
double energy = 0;
for(i=0;i<nParticles;i++) {
sum = 0;
for(j=0;j<dim;j++) {
sum += vel[i][j]*vel[i][j];
}
energy += sum*mass/2;
// printf("energy: %e \n", energy);
}
// printf("total: %e \n", energy);
return(energy);
}
返回调用者后,我立即打印返回的值。我得到 18.0
、19.0
、21.0
或 24.0
,具体取决于 printf< 的组合
我取消注释。
我做错了什么?
<小时/>更新:
在尝试解决此问题时,我已经注释掉了几乎所有内容。功能简化为
{
double energy = 123;
return(energy);
}
主程序是
int main() {
double a;
double vel[5][5];
a = GetKineticEnergy(1, 1, vel, 1);
printf("value: %e \n", a);
}
我明白了
value: 0.000000e+00
作为输出。
<小时/>更新:
如果我对二维数组的第二个维度进行硬编码double vel[][3]
,问题就会消失。目前,这似乎是一个有用的修复,但我对这种类型的硬编码感到畏缩。
最佳答案
如果GetKineticEnergy
函数位于不同的文件中并且原型(prototype)不可用,则可能会发生这种情况。考虑在 main
中声明其原型(prototype)或包含所需的头文件。
关于c - 返回值取决于函数中有多少个 printf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26887535/