user-0 提问: 新人自学求助，第一次发帖，关于C99标准和C89标准引起的问题

回复:
user: user-1
content: 楼主可以参考13楼的说法，哈哈

user: user-2
content: http://en.cppreference.com/w/c/io/fprintf 这里写的，对于printf，c99中%lf是double，c89中%f是double。（对于scanf，没有标准差别，都是%f是float，%lf是double）  LZ还是说下编译器的名称吧，因为我用的gcc，-std=c89和-std=c99编译后都能出正确的结果。

user: user-3
content: 我之前选中了支持C99标准，结果编译这段代码没有任何问题，但在运行时，不管输入什么，输出都是0. 然后取消了支持C99。就正常了。 楼主的这句话是不是有问题呢， 因为C89对于double类型和float类型都用%f格式输出，不识别%lf的输出。 在C99上，%lf和%f表示同一个意思。所以，在C89上会出问题，在C99上不会出问题吧？ 建议楼主澄清这个问题的问题。

user: user-3
content: 引用 14 楼 lin5161678 的回复:[quote=引用 11 楼 cfjtaishan 的回复:] 如果是编译器的问题，建议拿出依据。我要是误导的别人那是我的问题，但是提出一个观点起码需要论据支持，如果能够拿出编译器问题的依据出来，这样大家才会信服和支持。 编译器的bug，这个锅不能随便甩出去的。建议拿出更多的依据出来。 另外，建议楼主提供更多的信息，比如编译器版本，编译器环境（Windows，Linux等更多的详细版本）； 有疑问? 那你自己所说楼主的代码问题在哪里  你说不是编译器bug  请你解释一下 题主遇到的错误 [/quote] 首先你反驳我的意见，  引用 14 楼 lin5161678 的回复:[quote=引用 11 楼 cfjtaishan 的回复:] 如果是编译器的问题，建议拿出依据。我要是误导的别人那是我的问题，但是提出一个观点起码需要论据支持，如果能够拿出编译器问题的依据出来，这样大家才会信服和支持。 编译器的bug，这个锅不能随便甩出去的。建议拿出更多的依据出来。 另外，建议楼主提供更多的信息，比如编译器版本，编译器环境（Windows，Linux等更多的详细版本）； 有疑问? 那你自己所说楼主的代码问题在哪里  你说不是编译器bug  请你解释一下 题主遇到的错误 [/quote] 首先你提出我在误导大家，给大家传递错误的知识。然后你提出是编译器的bug，所以这些论据应该你先提供。至少需要提供两个论据：反驳我的观点论据，其二，提供编译器bug的论据。

user: user-4
content: 引用 11 楼 cfjtaishan 的回复:如果是编译器的问题，建议拿出依据。我要是误导的别人那是我的问题，但是提出一个观点起码需要论据支持，如果能够拿出编译器问题的依据出来，这样大家才会信服和支持。 编译器的bug，这个锅不能随便甩出去的。建议拿出更多的依据出来。 另外，建议楼主提供更多的信息，比如编译器版本，编译器环境（Windows，Linux等更多的详细版本）； 有疑问? 那你自己所说楼主的代码问题在哪里  你说不是编译器bug  请你解释一下 题主遇到的错误

user: user-3
content: 引用 10 楼 lin5161678 的回复:[quote=引用 7 楼 cfjtaishan 的回复:] [quote=引用 6 楼 super_admi 的回复:] 我建议你还是先弄清楚再说，免得误导了别人。 从网上的讨论，以及标准说明来看，对于printf，%lf和%f其实是一回事；而对于scanf，%lf和%f是有区别的。  [quote=引用 5 楼 cfjtaishan 的回复:] [quote=引用 2 楼 super_admi 的回复:] printf输出格式，不要使用%lf，而使用%f  我看了下网上的说法，怀疑这里可能是编译器的BUG。 这也是问题，double类型不是%lf输出吗？你的回答正好反过来吧  double和float的输出格式是不一样的。建议不要混为一谈。[/quote][/quote] printf既然是一回事，那么楼主的输入是%lf，定义的double类型，怎么解释输出结果是0？[/quote] 无知不是错 但无知还到处误导人就是你的不对了  C89 printf 没有%lf 不管是 double还是float都用 %f %lf 部分编译器扩展的实现  C99开始 printf里面 %lf 和 %f 行为完全一样  这里编译器的行为和标准要求不一致 如果楼主描述没错  的确是编译器bug  C89的情况下 %lf 输出0 符合标准要求 当然结果是错的 因为代码本身不规范 C99的情况下 %lf 必须得到正确的结果 做不到就是编译器的问题  有疑问? 那你自己所说楼主的代码问题在哪里[/quote] 如果是编译器的问题，建议拿出依据。我要是误导的别人那是我的问题，但是提出一个观点起码需要论据支持，如果能够拿出编译器问题的依据出来，这样大家才会信服和支持。 编译器的bug，这个锅不能随便甩出去的。建议拿出更多的依据出来。 另外，建议楼主提供更多的信息，比如编译器版本，编译器环境（Windows，Linux等更多的详细版本）；

user: user-4
content: 引用 7 楼 cfjtaishan 的回复:[quote=引用 6 楼 super_admi 的回复:] 我建议你还是先弄清楚再说，免得误导了别人。 从网上的讨论，以及标准说明来看，对于printf，%lf和%f其实是一回事；而对于scanf，%lf和%f是有区别的。  [quote=引用 5 楼 cfjtaishan 的回复:] [quote=引用 2 楼 super_admi 的回复:] printf输出格式，不要使用%lf，而使用%f  我看了下网上的说法，怀疑这里可能是编译器的BUG。 这也是问题，double类型不是%lf输出吗？你的回答正好反过来吧  double和float的输出格式是不一样的。建议不要混为一谈。[/quote][/quote] printf既然是一回事，那么楼主的输入是%lf，定义的double类型，怎么解释输出结果是0？[/quote] 无知不是错 但无知还到处误导人就是你的不对了  C89 printf 没有%lf 不管是 double还是float都用 %f %lf 部分编译器扩展的实现  C99开始 printf里面 %lf 和 %f 行为完全一样  这里编译器的行为和标准要求不一致 如果楼主描述没错  的确是编译器bug  C89的情况下 %lf 输出0 符合标准要求 当然结果是错的 因为代码本身不规范 C99的情况下 %lf 必须得到正确的结果 做不到就是编译器的问题  有疑问? 那你自己所说楼主的代码问题在哪里

user: user-3
content: 引用 8 楼 super_admi 的回复:"对于printf，%lf和%f其实是一回事"，这句话的前提是：“从网上的讨论，以及标准说明来看”。 所以，我才说“怀疑这里可能是编译器的BUG”。 阁下小学语文是体育老师教的？  [quote=引用 7 楼 cfjtaishan 的回复:] [quote=引用 6 楼 super_admi 的回复:] 我建议你还是先弄清楚再说，免得误导了别人。 从网上的讨论，以及标准说明来看，对于printf，%lf和%f其实是一回事；而对于scanf，%lf和%f是有区别的。  [quote=引用 5 楼 cfjtaishan 的回复:] [quote=引用 2 楼 super_admi 的回复:] printf输出格式，不要使用%lf，而使用%f  我看了下网上的说法，怀疑这里可能是编译器的BUG。 这也是问题，double类型不是%lf输出吗？你的回答正好反过来吧  double和float的输出格式是不一样的。建议不要混为一谈。[/quote][/quote] printf既然是一回事，那么楼主的输入是%lf，定义的double类型，怎么解释输出结果是0？[/quote][/quote] 对体育老师教的，但是怀疑编译器的bug，也是找不到原因的一个借口。

user: user-5
content: 拉不出屎赖茅房。

user: user-6
content: "对于printf，%lf和%f其实是一回事"，这句话的前提是：“从网上的讨论，以及标准说明来看”。 所以，我才说“怀疑这里可能是编译器的BUG”。 阁下小学语文是体育老师教的？  引用 7 楼 cfjtaishan 的回复:[quote=引用 6 楼 super_admi 的回复:] 我建议你还是先弄清楚再说，免得误导了别人。 从网上的讨论，以及标准说明来看，对于printf，%lf和%f其实是一回事；而对于scanf，%lf和%f是有区别的。  [quote=引用 5 楼 cfjtaishan 的回复:] [quote=引用 2 楼 super_admi 的回复:] printf输出格式，不要使用%lf，而使用%f  我看了下网上的说法，怀疑这里可能是编译器的BUG。 这也是问题，double类型不是%lf输出吗？你的回答正好反过来吧  double和float的输出格式是不一样的。建议不要混为一谈。[/quote][/quote] printf既然是一回事，那么楼主的输入是%lf，定义的double类型，怎么解释输出结果是0？[/quote]

user: user-3
content: 引用 6 楼 super_admi 的回复:我建议你还是先弄清楚再说，免得误导了别人。 从网上的讨论，以及标准说明来看，对于printf，%lf和%f其实是一回事；而对于scanf，%lf和%f是有区别的。  [quote=引用 5 楼 cfjtaishan 的回复:] [quote=引用 2 楼 super_admi 的回复:] printf输出格式，不要使用%lf，而使用%f  我看了下网上的说法，怀疑这里可能是编译器的BUG。 这也是问题，double类型不是%lf输出吗？你的回答正好反过来吧  double和float的输出格式是不一样的。建议不要混为一谈。[/quote][/quote] printf既然是一回事，那么楼主的输入是%lf，定义的double类型，怎么解释输出结果是0？

user: user-6
content: 我建议你还是先弄清楚再说，免得误导了别人。 从网上的讨论，以及标准说明来看，对于printf，%lf和%f其实是一回事；而对于scanf，%lf和%f是有区别的。  引用 5 楼 cfjtaishan 的回复:[quote=引用 2 楼 super_admi 的回复:] printf输出格式，不要使用%lf，而使用%f  我看了下网上的说法，怀疑这里可能是编译器的BUG。 这也是问题，double类型不是%lf输出吗？你的回答正好反过来吧  double和float的输出格式是不一样的。建议不要混为一谈。[/quote]

user: user-3
content: 引用 2 楼 super_admi 的回复:printf输出格式，不要使用%lf，而使用%f  我看了下网上的说法，怀疑这里可能是编译器的BUG。 这也是问题，double类型不是%lf输出吗？你的回答正好反过来吧  double和float的输出格式是不一样的。建议不要混为一谈。

user: user-0
content: 谢谢各位的回答

user: user-6
content: printf输出格式，不要使用%lf，而使用%f  我看了下网上的说法，怀疑这里可能是编译器的BUG。

user: user-6
content: 参考帖子：  http://bbs.csdn.net/topics/380160601

user: user-7
content: 關鍵應該在%lf上，但我手頭沒環境可以驗證你的問題。