2

这是我的代码

主程序

#include <stdio.h>
#include <stdbool.h>
#include "func.h"

int main () {
  int counts = 10;
  printf("Expected: %lF and rcount %lF,%lF\n",
          counts * 30* 0.156, rcount(0,30), rcount(30,0));

  return 0;
}

这是我的简化 func.h

#ifndef FUNC_INCLUDED
#define FUNC_INCLUDED

float rcount(int m, int n);

#endif

最后是我的 func.c

#include <stdio.h>
#include <stdbool.h>
#include <math.h>
#include "func.h"

double rcount(int m, int n) {
  double series1 = ((double)m/2)*(10+(double)m*10)/20;
  double series2 = ((double)n/2)*(10+(double)n*10)/20;
  return (series2 > series1) ? series2-series1 : series1-series2;
}

现在,如果我执行,我会得到 的随机值rcount(),而如果我#include<stdbool.h>从主目录中删除,我会得到正确的值。

任何想法?

4

1 回答 1

1

正如@Carl Norum 所说,“一定有一些你没有告诉我们的事情”非常有说服力。

rcount() 调用是 printf() 语句返回其 double 类型,但 printf() 由于原型而期望一个浮点数,如果没有看到原型,则期望一个 int。在任何一种情况下, printf() 都会显示错误的数据。

尝试 3 件事:1) 使用除 FUNC_INCLUDED 之外的不同定义,stdbool.h可能正在使用该宏。2)更改您的原型和实现以返回相同的类型,最好是双精度。3) 直接在 main() 之前制作 rcount() 原型的冗余副本。

extern double rcount(int m, int n);

stdbool.h 的使用/缺乏是一个红鲱鱼。有/没有它,您的编译正在使用一些不同的文件、选项等(除非它的 FUNC_INCLUDED)

于 2013-05-24T04:37:05.327 回答