Подтвердить что ты не робот

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

Можно ли дважды печатать Hello с помощью одиночного condition?

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

Ответ 1

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

: -)

Ответ 2

"condition" === (printf("Hello"), 0)

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

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

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

Ответ 3

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


#include <stdio.h>

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

 return 0 ;
}

печатает Hello, World

Ответ 4

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

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

Ответ 5

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

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

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

Ответ 6

#define CONDITION (0) if (0) {} else

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

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

Изменить - я забыл прояснить - это полагается на "другое", которое соответствует ближайшему открытому "если", а также тому факту, что оно написано как "если СОСТОЯНИЕ", а не если (СОСТОЯНИЕ) - скобки сделают загадку неразрешимой.

Ответ 7

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

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

Ответ 9

Не зная возвращаемого значения printf с верхней части головы:

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

Ответ 10

Прокомментировать "else";)

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

Ответ 11

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

Ответ 12

int main()
{
    runIfElse(true);
    runIfElse(false);

    return 0;
}

void runIfElse(bool p)
{
    if(p)
    {
     // do if
    }
    else
    {
     // do else
    }
}

Ответ 13

if  (true) printf ("Hello"); if (false)
    printf ("Hello");
else
    printf("World");

Ответ 14

Нет любви к exit?

if(printf("HelloWorld"), exit(0), "ByeBye") 
    printf ("Hello");
else
    printf ("World");

Ответ 15

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

if something
  do_this
  do_that
end

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

Ответ 16

Это может сработать:

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

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

Ответ 17

Решение 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;
}

Ответ 18

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

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

Ответ 19

 #include<stdio.h>
  int main()
{
 if(! printf("Hello"))
     printf ("Hello");
else
    printf ("World");
 return 0;
}

Так как Printf возвращает количество символов, которые оно напечатало успешно.

Ответ 20

if(printf("Hello") == 1)
    printf("Hello")
else
    printf("World")

Ответ 21

if (printf("Hello") < 1)
    printf("Hello");
else
    printf("World");

Ответ 22

Грег писал (а):

Независимо от того, что вы используете для условия, этот фрагмент будет либо печатать "Hello", либо "World", но никогда и то и другое.

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

Ответ 23

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

Здесь эквивалент Java:

    if ( System.out.printf("Hello").equals("") )
        System.out.printf("Hello");
    else
        System.out.printf("World");

Ответ 24

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

ИЗМЕНИТЬ для комментария.

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

Ответ 25

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

Ответ 26

Обманывание с помощью пустой инструкции 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;
    }
}

Ответ 27

Два возможных решения без использования операторов 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"); 
}
}

Ссылка: - Link1, Ссылка2

Ответ 28

if (printf("hello") & 0)
{
printf("hello");
}
else
{
printf("world");

Не нужно беспокоиться о возвращаемом значении printf.

Ответ 29

Нарушение предварительной обработки - по крайней мере, при очистке.


#define else 
if(1)
{
   printf("hello");
}
else
{
   printf("world");
}
#undef else

Ответ 30

Условие для этого вопроса:

 if(printf("hello")? 0 : 1) {   }