如何通过printf将正数打印为负数

时间:2010-09-23 14:19:32

标签: c

在阅读有关printf()时,我发现它可以通过以下代码(for - )按照用户的需要打印数字为正数或负数。但代码不起作用且输出为正值。请提及哪里错误是。谢谢

#include<stdio.h>
int main()
{
  printf (" %-d\n", 1977);
  return 0;
}

3 个答案:

答案 0 :(得分:7)

根据您的评论,您似乎误读了this page-+说明符执行两个完全不同的操作,您认为' - '也不应该这样做。

正如其他人所说,-确实有理由。 +说明符打印带有前导加号的正数(负数仍然带有前导减号):

printf("%d %d %+d %+d\n", -10, 10, -10, 10);

输出:

  

-10 10 -10 +10

答案 1 :(得分:4)

%-d将调整整数字段,它不会翻转符号。这样做:

printf (" %d\n", -1977);

以下是标志字符print(3)的完整摘录:

       -      The  converted  value is to be left adjusted on the field bound‐
              ary.  (The default is right justification.)  Except for  n  con‐
              versions,  the  converted  value  is  padded  on  the right with
              blanks, rather than on the left with blanks or zeros.  A - over‐
              rides a 0 if both are given.

Update0

我现在看到你的真实问题:要使用适当的符号前置输出,请使用+标志字符明确显示符号。这里是提取物:

       +      A sign (+ or -) should always be placed before a number produced
              by a signed conversion.  By default a sign is used only for neg‐
              ative numbers.  A + overrides a space if both are used.

并像这样使用它(命令行printf大致相同):

matt@stanley:~/cpfs$ printf "%+d\n" 3
+3
matt@stanley:~/cpfs$ printf "%+d\n" -3
-3
matt@stanley:~/cpfs$ printf "%+u\n" -3
18446744073709551613

请注意,明确请求该符号并不意味着对上述%u示例中签名的相应整数进行处理。

答案 2 :(得分:3)

printf (" -%d\n", 1977);会输出-1997(做坏事的方法),如果您希望负数变为正数,请执行printf (" %d\n", -1 * 1977);(这样做的好方法)

阅读reference,了解格式说明符的工作原理