C面试的"条件"是什么?

时间:2020-03-05 18:44:37  来源:igfitidea点击:

是否可以使用单个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;
    }
}