是否可以使用单Hello
打印condition
两次?
if "condition"
printf ("Hello");
else
printf("World");
答案 0 :(得分:83)
if ( printf("Hello") == 0 )
printf ("Hello");
else
printf ("World");
: - )
答案 1 :(得分:21)
"condition" === (printf("Hello"), 0)
真的很蹩脚:
int main() {
if (printf("Hello"), 0)
printf ("Hello");
else
printf("World");
}
我更喜欢使用逗号运算符,因为您不必查找printf
的返回值以了解条件的作用。这增加了可读性和可维护性。 : - )
答案 2 :(得分:16)
这听起来像是一些采访谜题。我希望这接近你想要的。
#include <stdio.h>
int main()
{
static int i = 0 ;
if( i++==0 ? main(): 1)
printf("Hello,");
else
printf("World\n");
return 0 ;
}
打印Hello, World
答案 3 :(得分:13)
系好安全带:
#include <stdio.h>
#include <setjmp.h>
int main()
{
jmp_buf env;
if (!setjmp(env))
{
printf("if executed\n");
longjmp(env, 1);
}
else
{
printf("else executed\n");
}
return 0;
}
打印:
if executed
else executed
这是什么意思?我对此表示怀疑,但至少它是可能的。使用fork
也可以这样做,但分支将在不同的进程中运行。
答案 4 :(得分:11)
如果是在Unix上:
if (fork())
printf ("Hello");
else
printf("World");
不保证印刷品订单的费用
答案 5 :(得分:6)
#define CONDITION (0) if (0) {} else
或其他一些。
如果你在面试中看到这样的问题,尽可能快地逃跑!提出这些问题的团队肯定是不健康的。
编辑 - 我忘了澄清 - 这依赖于“其他”与最接近的开放“if”相匹配,以及它被写为“if CONDITION”而不是if(CONDITION) - 括号会使拼图无法解决的事实
答案 6 :(得分:5)
答案 7 :(得分:5)
if
语句执行一个或另一个受控语句(在您的示例中都是printf
)。无论您使用condition
的内容,该代码段都会打印“Hello”或“World”,但不会同时打印两者。
编辑:好的,所以这是一个技巧问题,你可以在条件中放置任何你喜欢的东西(包括调用你想要的任何其他函数)。但那并不有趣。我无法相信我因为给出了正确的答案而得到了降级。
答案 8 :(得分:3)
基本答案是,在正常的事件过程中,你既不想在单个传递代码中执行'if'块和'else'块中的语句(如果你做的话,为什么还要烦恼?你也不能在没有跳过怪诞的箍的情况下执行这两组陈述。
一些怪诞的箍 - 邪恶的代码!
if (condition == true)
{
...stuff...
goto Else;
}
else
{
Else:
...more stuff...
}
当然,这是对(任何)语言的明显滥用,因为它等同于:
if (condition == true)
{
...stuff...
}
...more stuff...
但是,它可能会实现问题所在。如果你必须执行两个块,无论条件是真还是假,那么事情就会变得有点棘手。
done_then = false;
if (condition == true)
{
Then:
...stuff...
done_then = true;
goto Else;
}
else
{
Else:
...more stuff...
if (!done_then) goto Then;
}
答案 9 :(得分:3)
int main()
{
runIfElse(true);
runIfElse(false);
return 0;
}
void runIfElse(bool p)
{
if(p)
{
// do if
}
else
{
// do else
}
}
答案 10 :(得分:3)
评论“其他”;)
if(foo)
{
bar();
}
//else
{
baz();
}
答案 11 :(得分:3)
不知道printf
的回归值:
if (printf("Hello") && 0)
printf("Hello");
else
printf("World");
答案 12 :(得分:2)
对exit
不爱?
if(printf("HelloWorld"), exit(0), "ByeBye")
printf ("Hello");
else
printf ("World");
答案 13 :(得分:2)
所以...你想要在if块中执行代码...以及else块中的代码...同样的if / else语句?然后......你应该摆脱其他并在if中坚持使用taht代码。
if something
do_this
do_that
end
else语句只在if语句不执行时执行,反之亦然,这就是重点。这是一个奇怪的问题......
答案 14 :(得分:2)
if (true) printf ("Hello"); if (false)
printf ("Hello");
else
printf("World");
答案 15 :(得分:1)
解决方案1:
int main(int argc, char* argv[])
{
if( argc == 2 || main( 2, NULL ) )
{
printf("Hello ");
}
else
{
printf("World\n");
}
return 0;
}
解决方案2(仅适用于Unix和Linux):
int main(int argc, char* argv[])
{
if( !fork() )
{
printf("Hello ");
}
else
{
printf("World\n");
}
return 0;
}
答案 16 :(得分:1)
只需将代码放在if..else块之前或之后。
或者,如果你想在一些(但不是全部)分支中执行代码的“if,else if,else”块,只需将它放在一个单独的函数中并在每个块中调用该函数。
答案 17 :(得分:1)
#include<stdio.h>
int main()
{
if(! printf("Hello"))
printf ("Hello");
else
printf ("World");
return 0;
}
因为Printf返回成功打印的字符数。
答案 18 :(得分:1)
这可行:
if (printf("Hello") - strlen("Hello"))
printf("Hello")
else
printf("World")
此代码段强调printf
的返回值:打印的字符数。
答案 19 :(得分:0)
两种可能的解决方案,不使用printf语句: -
首先: -
#include <stdio.h>
int
main(void)
{
if (!stdin || (stdin = 0, main()))
printf("hello");
else
printf("world");
return 0;
}
第二
#include<stdio.h>
void main()
{
if (1
#define else if (1)
)
{
printf("hello");
}
else
{
printf("world");
}
}
答案 20 :(得分:0)
用空的其他陈述作弊:
if (condition)
// do if stuff
else;
// do else stuff
如果你不喜欢其他事实;实际上是一个空的else语句试试这个:
for (int ii=0; ii<2; ii++)
{
if (condition && !ii)
// do if stuff
else
{
// do else stuff
break;
}
}
答案 21 :(得分:0)
if (printf("hello") & 0)
{
printf("hello");
}
else
{
printf("world");
无需担心printf的返回值。
答案 22 :(得分:0)
滥用预处理 - 至少清理。
#define else
if(1)
{
printf("hello");
}
else
{
printf("world");
}
#undef else
答案 23 :(得分:0)
使用goto,这是当今最常用的关键词之一
答案 24 :(得分:0)
然后不要使用if else块。
编辑评论。
这可能意味着代码在两个块中,或者在块之前/之后,如果在两种情况下都需要运行。
答案 25 :(得分:0)
非常有趣的家伙,谢谢你的答案。我从来没有想过将print语句放在if条件中。
这是Java等价物:
if ( System.out.printf("Hello").equals("") )
System.out.printf("Hello");
else
System.out.printf("World");
答案 26 :(得分:0)
Greg写道:
无论您使用什么条件,该片段都会打印“Hello”或“World”,但不会同时打印。
嗯,这不是真的,但为什么你希望它打印两者,我找不到用例。它打败了if语句。可能的“真正”解决方案是不使用if。愚蠢的面试问题......:)
答案 27 :(得分:0)
if (printf("Hello") < 1)
printf("Hello");
else
printf("World");
答案 28 :(得分:0)
if(printf("Hello") == 1)
printf("Hello")
else
printf("World")
答案 29 :(得分:-2)
这个问题的条件是:
if(printf("hello")? 0 : 1) { }