【问题标题】:Prevent sign from printing in printf C C++防止在 printf C C++ 中打印符号
【发布时间】:2015-10-28 07:26:08
【问题描述】:

默认情况下会打印负数符号,如果需要,可以通过添加 + 标志打印加号。
我希望打印一个没有符号的数字。
我相信有一个标志,但这似乎不起作用。

printf("'%d'", 10); -->    '10'
printf("'%d'",-10); -->    '-10'
printf("'%+d'",10); -->    '+10'

如果有人能建议如何为输入 x 和 -x,(x>0) 打印 x,那就太好了。
PS:我不喜欢对数字进行操作, 我正在寻找一个软件功能。

【问题讨论】:

  • 使用"%d"abs?
  • abs() 是软件(库)功能。 printf 格式没有省略符号的语法。用%u 打印-10 不会是“10”。
  • 我想不使用 abs。
  • 不知道你为什么反对 abs() - 但如果不使用它是必要的,请使用三元 (p<0?-p:p) 作为等效项。
  • @user3121023,完成。我仍然认为使用 abs 更好 - 除非这是在没有完整(读取 STL/模板)C++ 支持的旧编译器中以兼容模式完成的。

标签: c++ c printf


【解决方案1】:

我希望打印一个不带符号的数字。

没有人会想要这样,因为将符号从 数中取出会使其成为 不同 数。

PS:我不喜欢对数字进行操作

好吧,那就做你不喜欢的事……abs() 是你正在寻找的函数,它准确地表达了正在发生的事情。

【讨论】:

    【解决方案2】:

    试试

    printf("%d",abs(number));

    其中 number 是您要打印的数字。

    【讨论】:

      【解决方案3】:

      不确定您为什么反对 abs() - 但如果不使用它是必要的,请使用三元 (p<0?-p:p) 作为等效项。

      【讨论】:

        【解决方案4】:

        printf 中没有标志可以做你想做的事,但是你可以使用 abs() 函数,像这样

        printf("%d",abs(i));
        

        i 是你的变量。

        这是整数。您也可以对数字进行二元运算以将其转换为正表示,但 abs() 已经为您完成了,所以这很肤浅。

        请注意,abs(i) 不会以任何方式修改 i,因此可以安全地在变量上使用而无需先复制它们。

        【讨论】:

        • 我并不担心修改数字,而是在寻找 printf 没有(需要)的功能。感谢您的澄清。
        • 如果i==INT_MINint 表示二进制补码中的负数(几乎在所有 CPU 上都是如此),这将有 UB。
        【解决方案5】:

        在您的示例中,您可以使用简单的字符替换。先用符号打印,然后用另一个字符替换:

        char buf[99];
        snprintf(buf, 99, "%+d'", 10); // +10'
        buf[0] = '\'';  // '10'
        printf("%s", buf);
        

        但这是特例,一般情况下应该考虑使用abs()函数。

        【讨论】:

        • 删除 buf[0] = '\''; 并使用 printf("%s", &buf[1]);。无需更换
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-03-25
        • 1970-01-01
        • 1970-01-01
        • 2017-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多