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

4

在阅读关于printf()的内容时,我发现通过以下代码(对于-)它可以按用户所需打印正数或负数。但是这段代码不起作用,输出结果是一个正值。请指出错误所在。谢谢。

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

你能告诉我在哪里找到printf文档中记录的这个特定格式字符串吗? - Rohith
3个回答

9
根据您的评论,看起来您误读了此页面-+ 修饰符执行完全不同的操作,而且都不会执行您认为“-”应该执行的操作。
正如其他人已经指出的那样,- 表示左对齐。 + 修饰符在正数前加上加号(负数仍带有减号):
printf("%d %d %+d %+d\n", -10, 10, -10, 10);

输出:

-10 10 -10 +10


哦!你这样做会强制编译器显示符号。 - user379888

4

%-d 会左对齐整数字段,但不会翻转符号。请改用以下方式:

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

这是来自标志字符下的print(3)的完整内容:
       -      要在字段边界左侧调整转换值。(默认是右对齐)。除了n个转换之外,该转换值会在右侧用空格填充,而不是在左侧用空格或零填充。如果两者都给出,则-会覆盖0。

更新0

我现在看到你真正的问题:要使用+标志字符在输出前添加适当的符号,以明确显示符号。以下是摘录:

       +      必须在有符号转换产生的数字之前始终放置一个符号(+或-)。默认情况下,仅对负数使用符号。如果同时使用,则+会覆盖空格。
并像这样使用(命令行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示例一样。


4

printf (" -%d\n", 1977);会输出-1997(不好的方法),如果您想让负数变成正数,请使用printf (" %d\n", -1 * 1977);(好的方法)

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


参考文献表示:即使是正数,也必须强制在结果前加上加号或减号(+或-)。默认情况下,只有负数前面会加上“-”符号。 - user379888
参考资料中提到了加号。 - Matt K

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接