提问人:ryan 提问时间:8/29/2008 最后编辑:crackerryan 更新时间:12/23/2015 访问量:11835
C面试考试的“条件”是什么?
What's the "condition" in C interview test?
答:
该语句执行一个或另一个受控语句(在您的示例中均为受控语句)。无论您使用什么,该代码段都会打印“Hello”或“World”,但绝不会同时打印两者。if
printf
condition
编辑:好的,所以这是一个技巧问题,你可以把你喜欢的任何内容放在条件中(包括调用整个其他函数,做任何你想做的事)。但这并不有趣。我简直不敢相信我因为给出了正确的答案而被贬低了。
评论
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)
真的很蹩脚:
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) - 括号会使难题无法解决。
格雷格写道:
无论您使用什么条件,该代码段都会打印“Hello”或“World”,但绝不会同时打印两者。
好吧,这不是真的,但是为什么你希望它同时打印两者,我找不到用例。它破坏了 if 语句的意义。可能的“真正”解决方案是根本不使用 if。愚蠢的面试问题... :)
非常有趣的家伙,谢谢你的回答。我从来没有想过将打印语句放在 if 条件中。
下面是 Java 的等效项:
if ( System.out.printf("Hello").equals("") )
System.out.printf("Hello");
else
System.out.printf("World");
不知道 off the top of your head 的返回值:printf
if (printf("Hello") && 0)
printf("Hello");
else
printf("World");
如果它在 Unix 上:
if (fork())
printf ("Hello");
else
printf("World");
Ofcoures 不保证订单 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;
}
没有爱?exit
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”块,你想在某些(但不是全部)分支中执行代码,只需把它放在一个单独的函数中,并在每个块中调用该函数。
注释“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
你是这个意思吗?我对此表示怀疑,但至少这是可能的。使用 you 也可以这样做,但分支将在不同的进程中运行。fork
评论
setjmp()
在我看来,这听起来像是一些面试难题。我希望这接近你想要的。
#include <stdio.h>
int main()
{
static int i = 0 ;
if( i++==0 ? main(): 1)
printf("Hello,");
else
printf("World\n");
return 0 ;
}
指纹Hello, World
评论
使用 goto,这是我们这个时代最未被充分利用的关键字之一
评论
基本的答案是,在正常的事件过程中,你既不想在一次代码传递中同时执行“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;
}
评论
int main()
{
runIfElse(true);
runIfElse(false);
return 0;
}
void runIfElse(bool p)
{
if(p)
{
// do if
}
else
{
// do else
}
}
评论
Cheeting 使用空的 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;
}
}
不使用 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");
}
}
这个问题的条件是:
if(printf("hello")? 0 : 1) { }
评论
if (printf("hello") & 0)
{
printf("hello");
}
else
{
printf("world");
无需为printf的返回值而烦恼。
#include<stdio.h>
int main()
{
if(! printf("Hello"))
printf ("Hello");
else
printf ("World");
return 0;
}
因为 Printf 返回它已成功打印的字符数。
滥用预处理 - 至少进行清理。
#define else
if(1)
{
printf("hello");
}
else
{
printf("world");
}
#undef else
上一个:PHP开发人员的可可技巧?
评论