执行'If'以及'else'块

Pra*_*ant 13 c

可能的重复:
关于If-Else在C++或C中同时执行的愚蠢问题是否有可能同时执行
if - else控制语句的if和else部分?

各位大家好..我在这样的采访中有一个问题我无法回答.考虑以下代码块.假设必要的头文件.

if(.......)
{
    printf("hello");
}
else
{
    printf("world");
}
Run Code Online (Sandbox Code Playgroud)

没有移动/添加任何代码并且没有使用额外的打印语句将输出带作"Hello world"..你必须在if语句中写下缺失的条件..是否可以通过某些条件执行两个块?请帮忙

Jer*_*myP 37

这会奏效

if(schrodingers_cat_is_dead())
{
    printf("hello");
}
else
{
    printf("world");
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,一旦你看到输出,它不仅会陷入只产生"你好"或"世界"的状态,而且有50%的可能性会杀死一只猫.

  • 下来选民请解释为什么他们没有幽默感? (12认同)
  • 这很有趣.谢谢. (4认同)

Ben*_*oit 34

试试fork()吧!(然后加入).这是我所知道的唯一涉及量子力学的特征.

fork() 每次返回两个不同的值,只有Schrödinger的猫能够.

注意:在评论中,Donal Fellows建议:

你将获得更可靠的行为 !vfork()

  • ...并希望他们以正确的顺序打印. (11认同)
  • 这不是一个糟糕的编程实践吗?他们为什么期望有人在接受采访时知道(更不用说)?:/ (2认同)
  • @townsean:这是一个很好的代码来做fork,这样你就可以让父亲做一件事而儿子正在做另一件事.如果if是if(0 == fork())它会为不同的线程做不同的事情,这是非常需要的,例如,如果你想执行一个外部进程,并让父亲等到它完成. (2认同)

Don*_*ows 16

如果您可以将宏定义作为该条件的"部分"...

if (1
#define else if (1)
)
{
    printf("hello");
}
else
{
    printf("world");
}
Run Code Online (Sandbox Code Playgroud)

然后该代码将确实打印" helloworld".这是一个可怕的,肮脏的技巧; 提到它我的灵魂可能有点麻烦!

  • @Prashant:感觉?!你在这里得到了深刻的伏都教hackery技巧,而不是良好的结构化编程.:-) (3认同)

Lar*_*tig 7

这取决于问题的确切措辞.正如您所描述的那样,问题并不是要求您执行if语句的两个分支.它要求您插入一个条件,导致打印"hello world"而不更改任何其他内容.

如果您完全自由地处理了条件,您可以使用此解决方案:

 if(printf("hello ") == -1)
 {
     printf("hello");
 }
 else
 {
     printf("world");
 }
Run Code Online (Sandbox Code Playgroud)

但是,该解决方案在条件中使用"printf",这是由您给出的规则之一排除的.我不清楚的是,printf禁令是否也适用于您在条件中写的内容.

注意:编辑答案以反映评论.最初的答案忽略了禁止印刷声明.