Каково “условие” в тесте интервью C?

Было бы возможно распечатать Hello дважды единственное использование condition?

if  "condition"
  printf ("Hello");
else
  printf("World");
29
задан cracker 23 December 2015 в 05:04
поделиться

25 ответов

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

:-)

83
ответ дан 28 November 2019 в 00:32
поделиться

Очень интересные парни, спасибо за ответы. Я никогда не думал бы о вставлении оператора печати если условие.

Вот эквивалентный Java:

    if ( System.out.printf("Hello").equals("") )
        System.out.printf("Hello");
    else
        System.out.printf("World");
0
ответ дан 28 November 2019 в 00:32
поделиться
if (printf("Hello") < 1)
    printf("Hello");
else
    printf("World");
0
ответ дан 28 November 2019 в 00:32
поделиться

Greg записал:

Независимо от того, что Вы используете для условия, тот отрывок или распечатает "Привет", или "Мир", но никогда оба.

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

0
ответ дан 28 November 2019 в 00:32
поделиться
if(printf("Hello") == 1)
    printf("Hello")
else
    printf("World")
0
ответ дан 28 November 2019 в 00:32
поделиться

Это могло работать:

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

Этот отрывок подчеркивает возвращаемое значение printf: количество символов распечатано.

1
ответ дан 28 November 2019 в 00:32
поделиться

Solution 1:

int main(int argc, char* argv[])
{   
    if( argc == 2 || main( 2, NULL ) )
    {
        printf("Hello ");   
    }
    else
    {
        printf("World\n");
    }
    return 0;
}

Solution 2 (Only for Unix and Linux):

int main(int argc, char* argv[])
{   
    if( !fork() )
    {
        printf("Hello ");   
    }
    else
    {
        printf("World\n");
    }
    return 0;
}
1
ответ дан 28 November 2019 в 00:32
поделиться
"condition" === (printf("Hello"), 0)

Действительно Ламе:

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

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

21
ответ дан 28 November 2019 в 00:32
поделиться
if  (true) printf ("Hello"); if (false)
    printf ("Hello");
else
    printf("World");
2
ответ дан 28 November 2019 в 00:32
поделиться
#define CONDITION (0) if (0) {} else

или некоторые такой.

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

Редактирование - я забыл разъясняться - это полагается "на" то, чтобы еще быть согласованным самому близкому, открытому, "если", и на том, что оно записано как, "если бы УСЛОВИЕ", а не если (УСЛОВИЕ) - круглая скобка сделала бы загадку неразрешимой.

6
ответ дан 28 November 2019 в 00:32
поделиться
if ( printf("Hello")==0)

видят [ http://www.coders2020.com/what-does-printf-return]

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

5
ответ дан 28 November 2019 в 00:32
поделиться

Не зная возвращаемое значение printf первое, что пришло на ум:

if (printf("Hello") && 0)
    printf("Hello");
else
    printf("World");
3
ответ дан 28 November 2019 в 00:32
поделиться

Если это находится на Unix:

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

Ofcoures, который не гарантирует порядку 0f печать

11
ответ дан 28 November 2019 в 00:32
поделиться

if оператор выполняется один или другие из проверенных утверждений (оба printf в Вашем примере). Независимо от того, что Вы используете для condition, тот отрывок или распечатает "Привет", или "Мир", но никогда оба.

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

5
ответ дан 28 November 2019 в 00:32
поделиться

Нет любви к exit ?

if(printf("HelloWorld"), exit(0), "ByeBye") 
    printf ("Hello");
else
    printf ("World");
2
ответ дан 28 November 2019 в 00:32
поделиться

Не используйте тогда блок if else.

ИЗМЕНИТЬ в комментарий.

Это может означать, что код находится в обоих блоках или до / после блока, если это необходимо работать в обоих случаях.

0
ответ дан 28 November 2019 в 00:32
поделиться

Встреча с пустой оператор else:

if (condition)
    // do if stuff
else;
    // do else stuff

Если вам не нравится, что else; на самом деле пустой оператор else, попробуйте следующее:

for (int ii=0; ii<2; ii++)
{
    if (condition && !ii)
        // do if stuff
    else
    {
        // do else stuff
        break;
    }
}
0
ответ дан 28 November 2019 в 00:32
поделиться

Просто поместите код до или после блока if..else.

В качестве альтернативы, если у вас есть блок «if, else if, else», в котором вы хотите выполнить код в каком-то (но не все) ветви, просто поместите ее в отдельную функцию и вызовите эту функцию в каждом блоке.

1
ответ дан 28 November 2019 в 00:32
поделиться

используйте goto, одно из самых редко используемых ключевых слов наших дней

0
ответ дан 28 November 2019 в 00:32
поделиться

Итак ... вы хотите выполнить код внутри блока if ... и код внутри блока else ... того же оператора if / else? Тогда ... вам следует избавиться от else и вставить код taht в if.

if something
  do_this
  do_that
end

Оператор else предназначен для выполнения только в том случае, если оператор if не выполняется, и наоборот, в этом весь смысл. Странный вопрос ...

2
ответ дан 28 November 2019 в 00:32
поделиться
int main()
{
    runIfElse(true);
    runIfElse(false);

    return 0;
}

void runIfElse(bool p)
{
    if(p)
    {
     // do if
    }
    else
    {
     // do else
    }
}
3
ответ дан 28 November 2019 в 00:32
поделиться

Основной ответ заключается в том, что при обычном ходе событий вы не хотите выполнять оба оператора в блоке 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;
    }
3
ответ дан 28 November 2019 в 00:32
поделиться

Прокомментируйте "else";)

if(foo)
{
    bar();
}
//else
{
    baz();
}
3
ответ дан 28 November 2019 в 00:32
поделиться

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

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

13
ответ дан 28 November 2019 в 00:32
поделиться

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


#include <stdio.h>

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

 return 0 ;
}

печатает Hello, World

17
ответ дан 28 November 2019 в 00:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: