在阅读有关printf()时,我发现它可以通过以下代码(for - )按照用户的需要打印数字为正数或负数。但代码不起作用且输出为正值。请提及哪里错误是。谢谢
#include<stdio.h>
int main()
{
printf (" %-d\n", 1977);
return 0;
}
答案 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.
我现在看到你的真实问题:要使用适当的符号前置输出,请使用+
标志字符明确显示符号。这里是提取物:
+ 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,了解格式说明符的工作原理