今天做poj2256的时候,用printf写%lf交是WA,看了讨论说改成%f,竟然真AC了。
一查,才发现这里还有些玄机。
似乎严格上,printf里并没有对于%lf的定义,虽然很多编译器会接受。
使用%f,无论是float型,还是double型,效果都是一样。
对于printf,因为有一个“默认参数提升”规则,float型会被提升为double型。因此printf只会看到双精度数。
对于scanf,由于接受的是指针(不太明白),并没有类型提升的说法。于是,double应该用%lf,float用%f。