31

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

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

30 回答 30

84
if ( printf("Hello") == 0 )
    printf ("Hello");
else
    printf ("World");

:-)

于 2008-08-28T19:41:32.740 回答
21
"condition" === (printf("Hello"), 0)

真蹩脚:

int main() {
    if  (printf("Hello"), 0)
        printf ("Hello");
    else
        printf("World");
}

我更喜欢使用逗号运算符,因为您不必printf为了知道条件的作用而查找返回值。这增加了可读性和可维护性。:-)

于 2008-08-28T19:42:40.180 回答
17

在我看来,这听起来像是一些面试难题。我希望这接近你想要的。


#include <stdio.h>

int main()
{
 static int i = 0 ;
 if( i++==0 ? main(): 1)
  printf("Hello,");
 else
  printf("World\n");

 return 0 ;
}

印刷Hello, World

于 2009-11-21T06:26:42.090 回答
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你也可以这样做,但分支将在不同的进程中运行。

于 2009-11-21T06:25:06.850 回答
11

如果是在 Unix 上:

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

不保证打印顺序 0f 的课程

于 2008-09-17T07:03:20.963 回答
6
#define CONDITION (0) if (0) {} else

或一些这样的。

如果你在面试中看到这样的问题,请尽快逃跑!提出这样的问题的团队必然是不健康的。

编辑 - 我忘了澄清 - 这依赖于“else”与最接近的开放“if”匹配,并且它被写为“if CONDITION”而不是 if (CONDITION) - 括号会使难题无法解决。

于 2008-08-28T19:45:53.260 回答
5

if语句执行一个或另一个受控语句(printf在您的示例中)。无论您使用什么condition,该代码段都将打印“Hello”或“World”,但绝不会同时打印两者。

编辑:好的,所以这是一个技巧问题,您可以在条件中放入任何您喜欢的内容(包括调用执行您想要的任何操作的整个其他函数)。但这并不有趣。我不敢相信我因为给出正确答案而被降级。

于 2008-08-28T19:39:32.420 回答
5
if ( printf("Hello")==0)

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

(马特纠正了我的=,谢谢,C 很远)

于 2008-08-28T19:40:56.580 回答
3

printf在不知道头顶的返回值的情况下:

if (printf("Hello") && 0)
    printf("Hello");
else
    printf("World");
于 2008-08-29T00:46:44.020 回答
3

评论“其他”;)

if(foo)
{
    bar();
}
//else
{
    baz();
}
于 2009-11-21T06:23:20.380 回答
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;
    }
于 2009-11-21T06:48:37.923 回答
3
int main()
{
    runIfElse(true);
    runIfElse(false);

    return 0;
}

void runIfElse(bool p)
{
    if(p)
    {
     // do if
    }
    else
    {
     // do else
    }
}
于 2009-11-21T06:48:51.530 回答
2
if  (true) printf ("Hello"); if (false)
    printf ("Hello");
else
    printf("World");
于 2008-08-28T19:41:58.810 回答
2

没有爱exit

if(printf("HelloWorld"), exit(0), "ByeBye") 
    printf ("Hello");
else
    printf ("World");
于 2009-09-03T15:02:32.930 回答
2

所以...你想执行 if 块内的代码...和 ​​else 块内的代码...相同的 if/else 语句?然后......你应该摆脱else并在if中粘贴taht代码。

if something
  do_this
  do_that
end

else 语句被设计为仅在 if 语句未执行时才执行,反之亦然,这就是重点。这是一个奇怪的问题...

于 2009-11-21T06:12:08.857 回答
1

这可以工作:

if (printf("Hello") - strlen("Hello"))
    printf("Hello")
else
    printf("World")

此代码段强调返回值printf:打印的字符数。

于 2008-08-28T19:43:03.643 回答
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;
}
于 2009-04-24T06:00:07.560 回答
1

只需将代码放在 if..else 块之前或之后。

或者,如果您有一个“if,else if,else”块,您想在某些(但不是全部)分支中执行代码,只需将它放在一个单独的函数中并在每个块中调用该函数。

于 2009-11-21T06:13:47.700 回答
1
 #include<stdio.h>
  int main()
{
 if(! printf("Hello"))
     printf ("Hello");
else
    printf ("World");
 return 0;
}

因为 Printf 返回它已成功打印的字符数。

于 2015-05-01T18:00:24.503 回答
0
if(printf("Hello") == 1)
    printf("Hello")
else
    printf("World")
于 2008-08-28T19:41:10.200 回答
0
if (printf("Hello") < 1)
    printf("Hello");
else
    printf("World");
于 2008-08-28T19:43:55.513 回答
0

格雷格写道:

无论您使用什么条件,该代码段都将打印“Hello”或“World”,但绝不会同时打印两者。

好吧,这不是真的,但是为什么您希望它同时打印两者,我找不到用例。它违背了 if 语句的意义。可能的“真正”解决方案是根本不使用 if。愚蠢的面试问题... :)

于 2008-08-28T19:50:00.553 回答
0

非常有趣的家伙,感谢您的回答。我从来没有想过将 print 语句放在 if 条件中。

这是Java等价物:

    if ( System.out.printf("Hello").equals("") )
        System.out.printf("Hello");
    else
        System.out.printf("World");
于 2008-08-28T19:59:11.107 回答
0

然后不要使用 if else 块。

编辑评论。

这可能意味着代码在两个块中,或者如果需要在两种情况下运行,则在块之前/之后。

于 2009-11-21T06:12:00.883 回答
0

使用 goto,这是我们这个时代使用最多的关键字之一

于 2009-11-21T06:32:52.980 回答
0

用空的 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;
    }
}
于 2009-11-21T07:06:48.700 回答
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

于 2012-04-14T06:45:50.893 回答
0
if (printf("hello") & 0)
{
printf("hello");
}
else
{
printf("world");

无需担心 printf 的返回值。

于 2014-08-29T08:23:15.183 回答
0

滥用预处理 - 至少进行清理。


#define else 
if(1)
{
   printf("hello");
}
else
{
   printf("world");
}
#undef else
于 2015-05-01T18:21:07.607 回答
-2

这个问题的条件是:

 if(printf("hello")? 0 : 1) {   }
于 2012-08-21T17:39:11.970 回答