2

ここに私のコードがあります

main.c

#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() は、プロトタイプのために float を予期しているか、プロトタイプが表示されなかった場合は int を予期しています。どちらの場合も、printf() は間違ったデータを表示します。

3 つのことを試してください: 1) FUNC_INCLUDED 以外の別の定義を使用してください。stdbool.h がそのマクロを使用している可能性がわずかにあります。2) プロトタイプと実装を変更して、同じ型、できれば double を返すようにします。3) main() の直前に rcount() プロトタイプの冗長コピーを作成します。

extern double rcount(int m, int n);

stdpool.h の使用/欠如は危険です。それの有無にかかわらず、コンパイルはいくつかの異なるファイル、オプションなどを使用して行われます(FUNC_INCLUDEDでない限り)

于 2013-05-24T04:37:05.327 に答える