【发布时间】:2014-08-24 07:33:54
【问题描述】:
我在 C++ Builder 3 和 C++ Builder 5 中编译了下一个程序,它产生了不同的输出:
#include <vcl.h>
#include <stdio.h>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
const char filename[] = "C://fprintf-test.txt";
FILE *file = fopen(filename, "a");
fprintf(file, "%0*.0f\n", 7, 99999.00);
fprintf(file, "%0*.0f\n", 7, -99999.00);
fprintf(file, "%0*.0f\n", 7, -999.00);
fprintf(file, "%0*.0f\n", 7, 999999.00);
fprintf(file, "%0*.0f\n", 7, 9.00);
return 0;
}
C++ Builder 3 中的输出:
0099999
-0099999
-0000999
0999999
0000009
C++ Builder 5 中的输出:
0099999
-099999
-000999
0999999
0000009
您可以清楚地看到负值中 0 的填充不同。为什么是这样?这有记录吗?
提前致谢
【问题讨论】:
-
为什么用超级人为的例子来展示这个?请在询问时考虑简化事情,以减少噪音。
-
因为现在人们可以自己测试它,开箱即用。但我会在下一个问题时记住这一点,谢谢:-)
-
当然,任何问题都应该确保这一点。我想我想知道:您的意思是说,如果您运行一个程序,其
main()由{ printf("%07.0f\n", -999); return 0; }组成,即没有文件、其他打印语句和使用*作为字段宽度? -
使用
printf或fprintf以及使用或不使用*都没有区别。 -
格式很好的问题。这肯定是一个 C++ Builder 3 错误。
标签: c c++builder borland-c++