提问者:小点点

输出浮点数时如何正确使用F和LF?


当我试图解决问题POJ1269-相交线时,我感到困惑。以下是链接:http://poj.org/problem?id=1269这是我最后的AC代码:

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;
int main(){
    int n;
    double x,y,xt,yt,xxt,yyt,xx,yy;
    cin >> n;
    printf("INTERSECTING LINES OUTPUT\n");
    while(n --){
        cin >> x >> y >> xt >> yt >> xx >> yy >> xxt >> yyt;
        if((yt-y)*(xxt-xx) == (yyt-yy)*(xt-x)){
            if((yt-y)*(xt-xx) == (yt-yy)*(xt-x)){
                printf("LINE\n");
            }
            else{
                printf("NONE\n");
            }
        }
        else{
            double X = ((x-xt)*(xx*yyt-xxt*yy) - (xx-xxt)*(x*yt-xt*y))
                    /  ((y-yt)*(xx-xxt) - (x-xt)*(yy-yyt));
            double Y = ((y-yt)*(xx*yyt-xxt*yy) - (yy-yyt)*(x*yt-xt*y))
                    /  ((y-yt)*(xx-xxt) - (x-xt)*(yy-yyt));
            printf("POINT %.2f %.2f\n", fabs(X) < 0.005 ? 0 : X,fabs(Y) < 0.005 ? 0 : Y);
        }
    }
    printf("END OF OUTPUT\n");
    return 0;
}

在最开始的时候,我用“.2lf”来输出X和Y,但是结果是错误的答案。我把X和Y定义为双浮点数,所以我想我应该用“.2lf”,但是我把它改为“.2f”之后我得到了AC。为什么会发生这种事?或者我的代码哪里错了?


共1个答案

匿名用户

我把X和Y定义为双浮点数,所以我想我应该用“.2lf”

取决于语言版本。C++03和更早版本继承的C标准库函数来自C89,其中使用LF格式说明符会导致未定义的行为。

由于C++11继承了C99标准,因此允许在printf中使用lf,其行为与使用f相同。