0

printf に少し問題があり、その理由がわかりません。

=>kernel.h

#ifndef KERNEL_H
#define KERNEL_H

namespace kernel
{
    extern const double h;
}

#endif // KERNEL_H

=>kernel.cpp

#include <kernel.h>

namespace kernel
{
    const double kernel::h=85.0;
}

=>main.cpp

#include "kernel.h"
#include <iostream>
//#include <cstdio>//With cstdio, it is the same problem !

int main(int argc, char *argv[])
{

    using namespace kernel;

    double a = h;

    printf("printf a is %d\n",a);
    std::cout<<"std::cout a is " << a << std::endl;

    printf("printf h is %d\n",h);
    printf("printf kernel::h is %d\n",kernel::h);
    std::cout << "std::cout h is " << h << std::endl;

    return 0;
}

そして、コンソールでの出力は次のとおりです。

printf a is 0
std::cout a is 85
printf h is 0
printf kernel::h is 0
std::cout h is 85

printf が機能しないのはなぜですか? C関数だから?

ありがとう

4

2 に答える 2

2

%dは整数用です。 adoubleを として出力しようとしていintます。ダブルスが欲しい%lfと思いますか?long floatdouble を実際に printf したことはありません。

于 2013-05-09T17:05:54.963 に答える
2

これは、として印刷しているためですinteger。試してみる%lg%lf

printf("printf kernel::h is %lg\n",kernel::h);

警告をオンにすると、コンパイラが問題を通知します。-Wformat

または、使用するだけstd::coutで、この種の問題は発生しません

std::cout << kernel::h;
于 2013-05-09T17:07:01.023 に答える