为什么这个C代码不打印负整数?

时间:2014-08-19 18:12:16

标签: c

我是C的初学者。我使用了这本书" C编程 - 现代方法"。 我在这本书中做了一个练习。但我不明白为什么当我填写负数时,此代码不会打印负数。 也许我错过了一些细节,或者它只是一些愚蠢的东西,所以请帮助我。 这是代码:

#include <stdio.h>

int main(void)
{
    int i;

    printf("Vul een negatief getal in: ");
    scanf("%d", &i);

    printf("%d\n", i >= 0 ? i : -i);

    system("pause");

    return 0;
}

谢谢

3 个答案:

答案 0 :(得分:6)

printf("%d\n", i >= 0 ? i : -i);

  • 如果您输入正数(或零),例如5它会打印i,即5
  • 如果你输入了一个负数,例如-5它会打印-i,即-(-5) 5

如果您不熟悉三元运算符,请查看其工作原理:

CONDITION ? EXPR_TRUE : EXPR_FALSE

它测试CONDITION,如果true测试EXPR_TRUE,则评估EXPR_FALSE

在你的情况下:

i >= 0 ? i : -i
如果ii >= 0

会产生-i

答案 1 :(得分:1)

因为这里有ternary operator

printf("%d\n", i >= 0 ? i : -i);

三元取绝对值。它可以扩展到

if (i >= 0) {
  printf("%d\n", i);
} else {
  printf("%d\n", -i);
}

答案 2 :(得分:1)

由于i >= 0 ? i : -i

如果i> = 0,例如i = 3,则打印3

如果我&lt; 0,例如i = -3,然后打印 - ( - 3)= 3

所以虽然我有时候 - 但是打印输出永远都不适合你。