【问题标题】:How to print a positive number as a negative number via printf如何通过 printf 将正数打印为负数
【发布时间】:2011-04-16 07:30:32
【问题描述】:

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

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

【问题讨论】:

  • 你能告诉我你在哪里找到了这个为 printf 记录的特殊格式字符串吗?

标签: c


【解决方案1】:

从您的 cmets 看来,您误读了 this page-+ 说明符做了两件完全不同的事情,你认为“-”也不应该做的事情。

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

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

输出:

-10 10 -10 +10

【讨论】:

  • 哦!它强制编译器显示符号
【解决方案2】:

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

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

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

- 转换后的值将在字段边界上进行左调整- 阿里。 (默认为右对齐。)除了 n con‐ 版本,转换后的值在右侧填充 空格,而不是在左边有空格或零。 A - 过- 如果两者都给出,则为 0。

更新0

我现在看到了您真正的问题:要在输出前加上适当的符号,请使用 + 标志字符来明确显示该符号。这里又是摘录:

+ 符号(+ 或 -)应始终放在产生的数字之前 通过签名转换。默认情况下,符号仅用于否定 原生数字。如果两者都使用,则 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 示例中的符号。

【讨论】:

    【解决方案3】:

    printf (" -%d\n", 1977); 会输出-1997(不好的方法),如果你想把负数变成正数,就做printf (" %d\n", -1 * 1977);(好的方法)

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

    【讨论】:

    • 引用说:即使对于正数,也强制在结果前面加上加号或减号(+ 或 -)。默认情况下,只有负数前面带有 - 号。
    • 参考文献说加号。
    猜你喜欢
    • 2019-11-08
    • 2011-09-16
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多