C面试中的“条件”是什么?

时间:2008-08-28 19:37:33

标签: c conditional

是否可以使用单Hello打印condition两次?

if  "condition"
  printf ("Hello");
else
  printf("World");

30 个答案:

答案 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)

if ( printf("Hello")==0)

见 [http://www.coders2020.com/what-does-printf-return]

(亚光纠正了我的=,谢谢,C很远)

答案 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"); 
}
}

参考: - Link1Link2

答案 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) {   }