【发布时间】:2013-09-30 20:03:10
【问题描述】:
我正在使用 Visual C++ 2012 并从命令行编译以下文件:
#include <stdio.h>
int main()
{
printf("%.5f", 18/4+18%4);
return 0;
}
链接 MSVCRT.LIB 而不是 LIBCMT 以避免运行时错误 R6002。
该程序的输出值为 0.00000。
但是,如果我在 C++ 中执行完全相同的操作
#include <iostream>
using namespace std;
int main()
{
cout << 18/4+18%4 << endl;
return 0;
}
现在,它打印出 6,就像它应该的那样。
有什么区别?是与语言本身(C 与 C++)还是输出方法(cout 与 printf)有关,还是只是 MSVC 的一个怪癖?
【问题讨论】:
-
尝试使用
"%d"而不是"%.5f"。 -
好像你的第一个代码示例 printf 格式需要一个浮点数,但算术是整数算术。
-
顺便说一句,他们没有从 C++ 中删除
printf,所以您可以在那里尝试并立即发现问题所在。 -
一个很好的演示为什么强类型 cout 比 loosy goosy printf 更好
-
@congusbongus - printf 代码编译并做了错误的事情,而不是开发人员的意图,实际上调用了未定义的行为。 cout 完全符合开发人员的预期
标签: c++ c floating-point printf cout