在C程序中帮助if-else

时间:2010-08-12 21:26:44

标签: c

  

可能重复:
  What’s the “condition” in C interview question?

void main()
{
         if(CONDITION)
               printf("Hello ");
         else
               printf("World");
}

将条件替换为两个printf语句都被执行的条件。 你不能在main()中有循环或其他东西 我在网上找到了这个代码,我正在考虑它背后的逻辑,但我不能。 请帮帮我 谢谢

8 个答案:

答案 0 :(得分:35)

 if(fork() == 0)
    ...

答案 1 :(得分:20)

虽然我非常喜欢rubber boots答案背后的想法,但我认为可能会有更简单的答案。该描述明确指出您可能没有 main()中的代码,但在外面添加一行会怎样?

#define else

void main()
{
     if(1)
           printf("Hello ");
     else
           printf("World");
}

更新以下是评论中Zan Lynx建议的替代方法。它只在CONDITION周围的括号之间添加代码:

void main()
{
     if(1
#define else
       )
           printf("Hello ");
     else
           printf("World");
}

答案 2 :(得分:3)

CONDITION = printf("Hello") == 0;

答案 3 :(得分:3)

这有点像作弊但是......

void main()
{
         if (printf("Hello ") == 0)
               printf("Hello ");
         else
               printf("World");
}

答案 4 :(得分:3)

这是另一种方法。它不如fork那么好,因为它往往只能工作一半的时间(因此不能完全解决问题),但更好的是消息永远不会被颠倒过来。

#include <stdio.h>

int main() {
        if ( ftell( stdout ) % 2 || ( printf( " " ), main() ) )
                printf( "Hello " );
        else
                printf( "World\n" );
}

首先查询stdout以查看已打印的内容以及字符数是否为奇数。如果是这样,它然后打印一个字符以反转奇偶校验和递归。递归调用会看到偶数个字符并打印“hello”并返回0. 0将顶部调用发送到else,打印“world”。

终端中的字符数必须为奇数才能生效。

答案 5 :(得分:2)

不完全是您提出的问题,但以下内容至少会打印出与执行printf时相同的结果:

     if(printf("Hello ") & 0)
           printf("Hello ");
     else
           printf("World");

答案 6 :(得分:2)

Potatoswatter指出直接从悬崖上跳跃,我提供以下内容:

#include <stdio.h>
#include <errno.h>

int main()
{
    if ((errno == 42) || (errno=42, main()))
    printf("hello, ");
    else
    printf("world.");
   return 0; 
}
C:\...>gcc -Wall q3472196.c

C:\...>a
hello, world.
C:\...>

我确实必须声明main并给它一个返回值来关闭几个警告。在stdio.h中甚至可能存在一些适当的邪恶定义,因此我们不必声明errno

答案 7 :(得分:0)

#include <stdio.h>
main()
{
  if (printf("Hello "),0)
    printf("Hello ");
  else
    printf("World");
  return 0;
}