Вопрос

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

if  "condition"
  printf ("Hello");
else
  printf("World");
Это было полезно?

Решение

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

:-)

Другие советы

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

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

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

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

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


#include <stdio.h>

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

 return 0 ;
}

С принтами Hello, World

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

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

Если это в Unix:

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

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

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

или что-то в этом роде.

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

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

if ( printf("Hello")==0)

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

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

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

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

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

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

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

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

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

Какие-то гротескные обручи - злой код!

    if (condition == true)
    {
         ...stuff...
         goto Else;
    }
    else
    {
Else:
        ...more stuff...
    }

Конечно, это простое злоупотребление (любым) языком, потому что это эквивалентно:

    if (condition == true)
    {
         ...stuff...
    }
    ...more stuff...

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

    done_then = false;
    if (condition == true)
    {
Then:
         ...stuff...
         done_then = true;
         goto Else;
    }
    else
    {
Else:
        ...more stuff...
        if (!done_then) goto Then;
    }
int main()
{
    runIfElse(true);
    runIfElse(false);

    return 0;
}

void runIfElse(bool p)
{
    if(p)
    {
     // do if
    }
    else
    {
     // do else
    }
}
if  (true) printf ("Hello"); if (false)
    printf ("Hello");
else
    printf("World");

Никакой любви к exit?

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

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

if something
  do_this
  do_that
end

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

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

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

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

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

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

Решение 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;
}
 #include<stdio.h>
  int main()
{
 if(! printf("Hello"))
     printf ("Hello");
else
    printf ("World");
 return 0;
}

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

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

Грег написал:

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

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

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

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

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

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

ОТРЕДАКТИРУЙТЕ, чтобы прокомментировать.

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

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

Приветствие с пустым утверждением 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;
    }
}

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

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

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

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

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


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

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

 if(printf("hello")? 0 : 1) {   }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top