Можно ли дважды печатать Hello
с помощью одиночного condition
?
if "condition"
printf ("Hello");
else
printf("World");
Можно ли дважды печатать 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");
Ofcoures, который не гарантирует порядок отпечатков
#define CONDITION (0) if (0) {} else
или некоторые такие.
Если вы видите такой вопрос на собеседовании, убегайте так быстро, как только сможете! Команда, которая задает такие вопросы, должна быть нездоровой.
Изменить - я забыл прояснить - это полагается на "другое", которое соответствует ближайшему открытому "если", а также тому факту, что оно написано как "если СОСТОЯНИЕ", а не если (СОСТОЯНИЕ) - скобки сделают загадку неразрешимой.
Оператор if
выполняет один или другой контролируемый оператор (оба printf
в вашем примере). Независимо от того, что вы используете для condition
, этот фрагмент будет либо печатать "Hello", либо "World", но никогда и то и другое.
Изменить: Хорошо, так что это вопрос трюка, и вы можете поместить все, что вам нравится, в состояние (включая вызов целой другой функции, которая делает все, что вы хотите). Но это вряд ли интересно. Я не могу поверить, что мне отказали в правильном ответе.
if ( printf("Hello")==0)
см [http://www.coders2020.com/what-does-printf-return]
(матовый исправленный мой =, спасибо, C далеко)
Не зная возвращаемого значения printf
с верхней части головы:
if (printf("Hello") && 0)
printf("Hello");
else
printf("World");
Прокомментировать "else";)
if(foo)
{
bar();
}
//else
{
baz();
}
Основной ответ заключается в том, что в обычном ходе событий вы не хотите выполнять оба оператора блока "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;
}
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? Тогда... вы должны избавиться от остального и вставить код taht в if.
if something
do_this
do_that
end
Оператор else предназначен для выполнения только в том случае, если оператор if не выполняется и наоборот, вот и все. Это странный вопрос...
Это может сработать:
if (printf("Hello") - strlen("Hello"))
printf("Hello")
else
printf("World")
Этот фрагмент подчеркивает возвращаемое значение printf
: количество напечатанных символов.
Решение 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;
}
Просто поставьте код до или после блока if..else.
В качестве альтернативы, если у вас есть блок if, else if, else, где вы хотите выполнить код в некоторых (но не во всех) ветвях, просто поместите его в отдельную функцию и вызовите эту функцию в каждом блоке.
#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.
Здесь эквивалент 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");
}
}
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) { }