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

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

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

Ответы [ 30 ]

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

Основной ответ заключается в том, что в обычном ходе событий вы не хотите выполнять оба оператора в блоке '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 голосов
/ 21 ноября 2009
int main()
{
    runIfElse(true);
    runIfElse(false);

    return 0;
}

void runIfElse(bool p)
{
    if(p)
    {
     // do if
    }
    else
    {
     // do else
    }
}
2 голосов
/ 28 августа 2008
if  (true) printf ("Hello"); if (false)
    printf ("Hello");
else
    printf("World");
2 голосов
/ 03 сентября 2009

Нет любви к exit?

if(printf("HelloWorld"), exit(0), "ByeBye") 
    printf ("Hello");
else
    printf ("World");
2 голосов
/ 21 ноября 2009

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

if something
  do_this
  do_that
end

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

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

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

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

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

1 голос
/ 21 ноября 2009

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

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

1 голос
/ 24 апреля 2009

Решение 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;
}
1 голос
/ 01 мая 2015
 #include<stdio.h>
  int main()
{
 if(! printf("Hello"))
     printf ("Hello");
else
    printf ("World");
 return 0;
}

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

0 голосов
/ 29 августа 2014
if (printf("hello") & 0)
{
printf("hello");
}
else
{
printf("world");

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

...