fprintf产生不同的输出

时间:2014-07-03 08:56:56

标签: c c++builder borland-c++

我在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填充不同。为什么是这样?这有记录吗?

提前致谢

2 个答案:

答案 0 :(得分:1)

我在gcc上试试这个:

// gcc -o test.exe test.c
#include <stdio.h>
int main(int argc, char* argv[])
{
  printf("%0*.0f\n", 7,  99999.00);
  printf("%0*.0f\n", 7, -99999.00);
  printf("%0*.0f\n", 7, -999.00);
  printf("%0*.0f\n", 7, 999999.00);
  printf("%0*.0f\n", 7, 9.00);
  return 0;
}

结果如下:

0099999
-099999
-000999
0999999
0000009

printf文档说:

  

width:要打印的字符的最小数量如果值为   打印比这个数字短,结果是填充[...]   即使结果较大,也不会截断值。

他们谈论角色(减去角色)。

我不知道C ++ builder。查看printf C ++ builder文档差异V3 / 5。 (这可能是V3中的一个错误...)

答案 1 :(得分:0)

正如@chux在评论中所述:这可能是一个C ++ Builder 3错误。它没有记录。

如果有人遇到这个问题,我们就这样解决了:

fprintf(FileOut, "%0*.*f\n",
#if ( __BORLANDC__ >= 0x560 )
        paddingNumber,
#else
        paddingNumber < 0 ? paddingNumber - 1 : paddingNumber,
        paddingNumber )