Выполнение блока "If", а также "else"

Возможные дубликаты:
Глупый вопрос относительно одновременного выполнения If-Else на С++ или C
Возможно ли выполнить как if, так и else часть if — else control statement?

Привет всем.. У меня был вопрос в таком интервью, на который я не мог ответить. Рассмотрим следующий блок кода. Предположим, что необходимы файлы заголовков.

if(.......)
{
    printf("hello");
}
else
{
    printf("world");
}

без перемещения/добавления какого-либо кода и без использования дополнительных заявлений печати выводить вывод как "Hello world".. Вам нужно написать отсутствующее условие в if statement.. возможно ли выполнить оба блока по некоторому условию? Пожалуйста, помогите

Ответы

Ответ 1

попробуйте fork()! (и присоединиться потом). Это единственная функция, связанная с квантовой механикой, о которой я знаю.

fork() возвращает два разных значения за раз, на которые способен только кошка Шредингера.

ПРИМЕЧАНИЕ: В комментарии, Donal Fellows предлагает:

Вы получите более надежное поведение с !vfork()

Ответ 2

Это будет работать

if(schrodingers_cat_is_dead())
{
    printf("hello");
}
else
{
    printf("world");
}

К сожалению, как только вы посмотрите на результат, он не только рухнет в состояние только создания "привет" или "мира", но у вас будет 50% шанс убить кошку.

Ответ 3

Если вы можете указать определение макроса как "часть" этого условия...

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

Тогда этот код действительно напечатает "helloworld". Это ужасный, грязный трюк; моя душа, вероятно, в беде, чтобы упомянуть об этом!

Ответ 4

Это зависит от точной формулировки вопроса. Когда вы это описываете, вопрос не требует от вас выполнения обеих ветвей оператора if. Он просит вас вставить условие, которое приводит к печати "hello world" без изменения чего-либо еще.

Если у вас есть полная свобода в том, что вы вложили в это условие, вы можете использовать это решение:

 if(printf("hello ") == -1)
 {
     printf("hello");
 }
 else
 {
     printf("world");
 }

Однако в решении используется "printf", что исключается одним из правил, которые вы указали. Для меня неясно, относится ли запрет на печать, что вы пишете в этом состоянии.

Примечание. Ответ редактируется для отражения комментариев. Первоначальный ответ игнорировал запрет на заявления печати. ​​

Ответ 5

Вы можете, но это, вероятно, плохая практика. Кажется, интервьюер тестировал ваши знания языка. Построено с gcc 4.1.2.

#include <stdio.h>

int main() {
  if(!printf("hello ")) {
    printf("hello");
  } else {
    printf("world");
  }

  return 0;
}

Ответ 6

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

if(check==true)
{
 printf("dont do this");
 goto condition1;
}
else
{
 condition1: ////this is crazy
 printf("Dont do this ever");
}

Ответ 7

Нет, это невозможно. Будет выполнен первый блок или блок else; это характер оператора if.

Ответ 8

Невозможно выполнить обе ветки if/else, не используя ее со странными вещами. Если условие истинно, то else не будет выполняться и наоборот.

Они абсолютно взаимоисключающие.

Ответ 9

Не оборачиваясь снова. Я не думаю, что вы можете использовать любое устройство Duff, как безумие в заявлениях. Я полагаю, вы могли бы использовать goto, вы говорите, просто написав условие.

Ответ 10

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

Ответ 11

Проще всего я думаю:

//if(.......)
{
    printf("hello");
}
//else
{
    printf("world");
}

Ответ 12

Не работает ли это?

if (!printf("hello")){
   printf("hello");
}
else{
   printf(" world");
}

Ответ 13

вы можете попробовать:

if()
{
printf("hello");
goto Found;
}
else
{
Found: printf("world");
}