之所以写这个,是因为在POJ上用%lf\%lf%lf会爆炸…
首先,说明下,C++C++C++将实数分为单精度和高精度这些花里胡哨的东西…
printfprintfprintf的%f\%f%f说明符的确既可以输出floatfloatfloat型又可以输出doubledoubledouble型。
根据一种“默认参数提升”的睿智东西,floatfloatfloat型在%f\%f%f输出时,会被提升为doubledoubledouble型。因此使用printfprintfprintf只会看到双精度数。
但作为printfprintfprintf的孪生兄弟scanfscanfscanf,情况就完全不同了,它接受指针,可这里没有类似的类型提升。向floatfloatfloat存储和向doubledoubledouble存储大不一样。也就是不会出现提升的骚操作。因此,scanfscanfscanf是要区别%f\%f%f和%lf\%lf%lf。
最后,讲一下总结出来的东西:
不管你三七二十一,只要用printfprintfprintf输出实数,直接用%f\%f%f就好了。而当你用scanfscanfscanf读入实数,就不得不把%f\%f%f %lf\%lf%lf分好了