这个程序的逻辑是什么?

时间:2013-12-19 18:21:27

标签: c

我在书中遇到了一个问题,它要求我写下以下程序的输出。

#include<stdio.h>

int main()
{
     int j=4;
     ( !j != 1 ? printf("\nWelcome") : printf("GooD Bye"));
     return 0;
}

我基本上无法理解在运行程序时如何打印Welcome。任何人都可以在运算符层次结构的帮助下解释,编译器根据表达式计算出什么值?

2 个答案:

答案 0 :(得分:7)

该行

( !j != 1 ? printf("\nWelcome") : printf("GooD Bye")); 

相当于

if(!j != 1)
    printf("\nWelcome);
else
    printf("Good Bye");  

此处!j评估为0,因此条件!j != 1将始终为真,并且会打印Welcome

答案 1 :(得分:1)

是的,混淆了c !!

确定c!j的计算结果为0,因为它是一个非0的数字所以0!= 1是真的,因为三元运算的真实部分被执行了,并且#34; welcome&#34;打印出来。

所以要重估:

!4 = 0 //或任何数字

!0 = 1