2014-01-24 2 views
2

Есть ли какой-либо метод использования условного оператора внутри других операторов, например printf?Условные утверждения внутри `printf`

Одним из способов являются использование тройного оператора ? : например:

printf("%d", a < b ? a : b); 

Есть ли метод для более сложных условий?

+4

Почему бы вам просто не оценить выражение заранее? – Alexander

+0

Я хотел знать, поддерживает ли язык c такими утверждениями – codeln

+1

Что значит «более сложный»? Тройное выражение является выражением и поэтому может использоваться как аргумент функции (любой функции). Если условие в тройном выражении «сложно» или нет, это не имеет значения. –

ответ

3

Нет необходимости в более сложных выражениях, условный оператор уже достаточно плох. Для этого нет языковой функции. Вместо этого напишите функцию.

printf("%d", compare(a,b)); // good programming, readable code 

printf("%d", a<b?(x<y?x:y):(x<y?y:x)); // bad programming, unreadable mess 
+2

Тернарные операторы довольно нормальные, и при использовании хорошо делают код вполне читаемым и более компактным. С другой стороны, необходимость перескакивать больше методов может затруднить сложную систему отладки. Если его простой тип сравнения if/else, идите на него и используйте тройной, если он вложен в сложную логику, то обязательно используйте метод. – Michael

+0

@ Майкл. Здравый смысл должен применяться от случая к случаю. Действительно, в некоторых случаях оператор '?:' Делает код более читабельным (например, операторы switch, где единственной задачей каждого «случая» является присвоение значения на основе условия), но в большинстве случаев, таких как в этом примере это фактически делает код менее читаемым. Поэтому оператор должен использовать с осторожностью - всегда считайте, что другие решения более читабельны. Кроме того, в отличие от 'if' statments,'?: 'Вызывает множественные неявные действия типа, что может вызвать непредвиденные проблемы. – Lundin

1

Каждое условное заявление возвращается 1 или 0. Эти значения int

Так что, если вы printf("%d",a>b); то либо 1 (истина) или 0 (ложь) будут напечатаны.

В вашем примере вы используете тернарный оператор a<b?a:b. Если условие истинно, тогда a будет напечатано иначе b.

2

Вы не можете поставить заявления в printf на всех, вы только можете поместить выражения там. Тернарный оператор формирует выражение . Выражение в основном является деревом операторов и операндов, однако допускается несколько смежных операторов, таких как оператор запятой ',' или оператор присваивания '='. Это позволяет выражениям иметь побочные эффекты.

Смежные вопросы