C面试的"条件"是什么?
是否可以使用单个condition
两次打印" Hello"?
if "condition" printf ("Hello"); else printf("World");
解决方案
回答
" if"语句执行一个或者另一个受控语句(在示例中均为" printf")。无论我们使用什么"条件",该片段都将打印" Hello"或者" World",但不会同时打印两者。
编辑:好的,所以这是一个技巧问题,我们可以在条件中放入任何我们喜欢的内容(包括对执行我们想要执行的操作的整个其他函数的调用)。但这几乎没有意思。我不敢相信我因给出正确答案而心灰意冷。
回答
if ( printf("Hello")==0)
看
[http://www.coders2020.com/what-does-printf-return]
(matt更正了我的=,谢谢,C离我们很远)
回答
if(printf("Hello") == 1) printf("Hello") else printf("World")
回答
if ( printf("Hello") == 0 ) printf ("Hello"); else printf ("World");
:-)
回答
if (true) printf ("Hello"); if (false) printf ("Hello"); else printf("World");
回答
"condition" === (printf("Hello"), 0)
真是me脚:
int main() { if (printf("Hello"), 0) printf ("Hello"); else printf("World"); }
我更喜欢使用逗号运算符,因为我们不必查找printf
的返回值即可知道条件函数的作用。这增加了可读性和可维护性。 :-)
回答
这可以工作:
if (printf("Hello") - strlen("Hello")) printf("Hello") else printf("World")
此代码段强调了printf的返回值:打印的字符数。
回答
if (printf("Hello") < 1) printf("Hello"); else printf("World");
回答
#define CONDITION (0) if (0) {} else
或者类似的东西。
如果我们在面试中看到这样的问题,请尽快逃跑!提出此类问题的团队注定是不健康的。
编辑我忘了澄清这一点是因为" else"与最接近的" if"匹配,并且事实是它写为" if CONDITION"而不是if(CONDITION)括号会使难题无法解决。
回答
Greg wrote: No matter what you use for condition, that snippet will either print "Hello", or "World", but never both.
好吧,这不是真的,但是为什么我们要它同时打印两个,我却找不到用例。它打破了具有if语句的观点。可能的"真实"解决方案是根本不使用if。愚蠢的面试问题... :)
回答
非常有趣的家伙,感谢回答。我从未想过将print语句放在if条件内。
这是等效的Java:
if ( System.out.printf("Hello").equals("") ) System.out.printf("Hello"); else System.out.printf("World");
回答
在不知道printf
的返回值的情况下:
if (printf("Hello") && 0) printf("Hello"); else printf("World");
回答
如果在Unix上:
if (fork()) printf ("Hello"); else printf("World");
不能保证打印命令为0f的信息
回答
解决方案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; }
回答
不喜欢"退出"吗?
if(printf("HelloWorld"), exit(0), "ByeBye") printf ("Hello"); else printf ("World");
回答
则不要使用if else块。
编辑评论。
如果这两种情况都要求运行,则这可能意味着该代码位于两个块中,或者位于该块之前/之后。
回答
那么...我们想在同一if / else语句的if块内执行代码...,再在else块内执行代码?然后...我们应该摆脱else,并将代码保留在if中。
if something do_this do_that end
else语句仅在不执行if语句时才执行,反之亦然,这就是重点。这是一个奇怪的问题...
回答
只需将代码放在if..else块之前或者之后。
另外,如果我们有一个" if,else if,else"块,我们希望在某些(但不是全部)分支中执行代码,只需将其放在单独的函数中,然后在每个块中调用该函数。
回答
评论"其他";)
if(foo) { bar(); } //else { baz(); }
回答
系好安全带:
#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
也可以做到,但是分支将在不同的进程中运行。
回答
在我看来,这听起来像一些面试难题。我希望这接近我们想要的。
#include <stdio.h> int main() { static int i = 0 ; if( i++==0 ? main(): 1) printf("Hello,"); else printf("World\n"); return 0 ; }
打印"你好,世界"
回答
使用goto,这是当今最没被充分利用的单个关键字之一
回答
基本的答案是,在通常的事件过程中,我们既不想一次通过代码执行" if"块和" else"块中的两个语句(为什么要麻烦条件,如果这样做)我们可以执行两组语句,而不必跳过怪诞的箍。
一些怪诞的箍邪恶的代码!
if (condition == true) { ...stuff... goto Else; } else { Else: ...more stuff... }
当然,这是对(任何)语言的简单滥用,因为它等效于:
if (condition == true) { ...stuff... } ...more stuff...
但是,它可以实现问题所在。如果无论条件是true还是false都必须执行两个块,那么事情会变得有些棘手。
done_then = false; if (condition == true) { Then: ...stuff... done_then = true; goto Else; } else { Else: ...more stuff... if (!done_then) goto Then; }
回答
int main() { runIfElse(true); runIfElse(false); return 0; } void runIfElse(bool p) { if(p) { // do if } else { // do else } }
回答
用空的else语句欺骗:
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; } }