Что такое «условие» в тесте на собеседование? - PullRequest
29 голосов
/ 28 августа 2008

Можно ли будет печатать Hello дважды, используя один condition?

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

Ответы [ 30 ]

83 голосов
/ 28 августа 2008
if ( printf("Hello") == 0 )
    printf ("Hello");
else
    printf ("World");

: -)

21 голосов
/ 28 августа 2008
"condition" === (printf("Hello"), 0)

Действительно хром:

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

Я предпочитаю использовать оператор запятой, потому что вам не нужно искать возвращаемое значение printf, чтобы узнать, что делает условное выражение. Это повышает удобочитаемость и ремонтопригодность. : -)

16 голосов
/ 21 ноября 2009

Это звучит для меня как загадка для интервью. Я надеюсь, что это близко к тому, что вы хотите.


#include <stdio.h>

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

 return 0 ;
}

отпечатков Hello, World

13 голосов
/ 21 ноября 2009

пристегните ремни безопасности:

#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, вы также можете сделать это, но ветви будут работать в разных процессах.

11 голосов
/ 17 сентября 2008

Если это в Unix:

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

Ofcoures, которые не гарантируют заказ 0f отпечатки

6 голосов
/ 28 августа 2008
#define CONDITION (0) if (0) {} else

или что-то подобное.

Если вы видите такой вопрос на собеседовании, убегайте так быстро, как только сможете! Команда, которая задает такие вопросы, обязательно будет здорова.

Редактировать - я забыл уточнить - это зависит от того, что «else» сопоставляется с ближайшим открытым «if», и от того факта, что оно написано как «if CONDITION», а не if (CONDITION) - скобка сделает головоломку неразрешимой .

5 голосов
/ 28 августа 2008
if ( printf("Hello")==0)

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

(Мэтт исправил мой =, спасибо, C далеко)

5 голосов
/ 28 августа 2008

Оператор if выполняет один или другой из контролируемых операторов (оба printf в вашем примере). Независимо от того, что вы используете для condition, этот фрагмент будет либо выводить «Hello», либо «World», но никогда оба.

Edit: Хорошо, это вопрос с подвохом, и вы можете поместить в условие все, что захотите (включая вызов всей другой функции, которая делает все, что вы захотите). Но это вряд ли интересно. Не могу поверить, что меня унизили за правильный ответ.

3 голосов
/ 29 августа 2008

Не зная возвращаемого значения printf с макушки головы:

if (printf("Hello") && 0)
    printf("Hello");
else
    printf("World");
3 голосов
/ 21 ноября 2009

Прокомментируйте "остальное";)

if(foo)
{
    bar();
}
//else
{
    baz();
}
...