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

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

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

从您的评论中看起来您误读了此页面 。 -+说明符完成两个完全不同的事情,你认为’ – ‘也不应该这样做。

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

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

输出:

-10 10 -10 +10

%-d将调整整数字段,它不会翻转符号。 改为:

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

这是在旗帜字符 print(3)的完整摘录:

        - 转换后的价值将在字段范围内调整 - 
              元。  (默认为右对齐。)除n con外
              版本,转换后的值填充在右侧
              空白,而不是左边的空白或零。  A  -  over-
              如果两者都给出,则乘以0。

Update0

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

        +应始终在生成数字之前放置一个符号(+或 - )
              通过签名转换。 默认情况下,符号仅用于否定
              数字。 如果两者都使用,则A +会覆盖空格。

并像这样使用它(命令行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示例中的相应整数视为已签名。

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

阅读参考资料 ,了解格式说明符的工作原理