c - 返回值取决于函数中有多少个 printf

标签 c printf return-value

我有一个函数,它采用一堆粒子的速度矩阵并尝试计算粒子的总动能。

它没有给我正确的值。为了调试,我在函数中添加了一些 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.019.021.024.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/

相关文章:

c - 你如何使用递归从右边遍历来打印数组中的偶数?

c - 在多线程程序中处理异步信号

c - 用 C 打印数字模式

c++ - 在 C++11 中可移植地打印 std::uint64_t 变量的格式说明符

c - 如何在输入到文本文件的每个字符串之间添加空格

linux - 从 bash 脚本返回值

c++ - 使用构造函数返回

c# - 通过asp.net从控制台读取输出

c - C语言如何重复一个字符串

javascript - 防止按钮在第一次使用 Javascript 后减少数字