void main()
{
if(CONDITION)
printf("Hello ");
else
printf("World");
}
将条件替换为两个printf语句都被执行的条件。 你不能在main()中有循环或其他东西 我在网上找到了这个代码,我正在考虑它背后的逻辑,但我不能。 请帮帮我 谢谢
答案 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;
}