C言語問題%f vs%lf,%d vs%ld

1284 ワード

C言語問題%f vs%lf,%d vs%ld
時には%lfとして出力すると正解です.%fは間違っている.どうして?先生はLFがDOUBLEタイプで15桁の有効数字を代表していると言いました.しかし、三角形の面積を求める問題ではこれとはまったく関係がない.以下のコードは%fを%lfに変更すると正解が出力されます.どうして?
#include "stdio.h"
#include "math.h"

int main (void)
{
    double a,b,c,s;
    printf("Please enter 3 reals:
"); scanf("%f%f%f",&a,&b,&c); if( (a+b)>c && (a+c)>b && (b+c)>a ) { s=(a+b+c)*0.5; printf("
Area of the triangle is %lf
", sqrt(s*(s-a)*(s-b)*(s-c)) ); } else printf("It is not triangle!
"); return 0; }

%fおよび%lfは、それぞれfloatタイプおよびdoubleタイプであり、入出力をフォーマットする際に対応するフォーマット記号である.そのうち、float、単精度浮動小数点型、対応%f.double、二精度浮動小数点型、対応%lf.出力に使用する場合:floatタイプは%lfフォーマットを使用できますが、何のメリットもありません.doubleタイプ%fフォーマットを使用すると、出力エラーが発生する可能性があります.入力時:doubleタイプで%f形式が使用されると、入力値エラーが発生します.floatタイプdoubleタイプを使用すると、入力エラーだけでなく、プログラムのクラッシュを引き起こす可能性があります.したがって、入出力時にはdoubleとfloatを区別し、対応するフォーマット記号を使用する必要があります.
 
%ldはロング整数数を出力するために使用されます.%dは整数数を出力するために用いられる.フォーマットは、指定された先頭アドレスから出力される複数バイトの内容を示すため(それらを長尺整数または整数として解釈する)ので、対象を間違えると思わぬ結果になる.%dで長尺整数を出力すると、頭の上の数バイトしか取らず、元の長尺整数に相当する.一方、%ldで整数を出力すると、実際の数バイト数が少ないため、無理により多くのバイトを取ることになる「他人の家の子供を引き取る」ということで、別のデータを現在の値と解釈しました.