как работает условие if (i++)?

Возможный дубликат:
Концепция постинкремента и предварительного инкремента?

Я не могу понять, как условие «если» работает с оператором увеличения/уменьшения в этом сценарии:

#include<stdio.h> 
void main() 
{ 
  int n=0; 
  if(n++) 
  { 
    printf("C-DAC"); 
  } 
  else if(n--) 
  { 
    printf("ACTS"); 
  } 
}

Его выход - ACTS.

что происходит в состоянии IF?


person Anvay    schedule 15.06.2012    source источник
comment
пожалуйста, сделайте отступ в коде - все в столбце 1 делает его очень трудным для чтения - спасибо.   -  person Levon    schedule 15.06.2012
comment
Почему мы снова отвечаем на этот вопрос? :(   -  person KevinDTimm    schedule 15.06.2012


Ответы (10)


if (n++) Проверяет, не равно ли n нулю, а затем увеличивает n

else if (n--) Проверяет, не равно ли n нулю, а затем уменьшает n

Ваше первое утверждение if неверно (поскольку n равно нулю), затем увеличивается n, проверяется утверждение else if (в этот момент n равно 1), if (1) истинно и printf("ACTS") вызывается

person Ribtoks    schedule 15.06.2012
comment
Прошу прощения, но в программе нигде не указано, что она должна проверять, n!=0... как она это понимает?? - person Anvay; 15.06.2012
comment
Оператор if (n) в c++ равен оператору if (n != 0) - person Ribtoks; 15.06.2012
comment
На самом деле условия if вообще нет, по крайней мере, вне отладочной сборки. По мере написания программы компилятор может тривиально доказать во время компиляции, что первая проверка всегда ложна, а вторая проверка всегда верна, и переменная не используется в других случаях. Таким образом, программа уменьшится до int main() { printf(ACTS"); return 0;} - person Damon; 15.06.2012
comment
@Damon Да, но мы говорим о самом C++, а не об оптимизации компилятора. - person Ribtoks; 15.06.2012
comment
Понял .. Большое спасибо Ribtoks !!!! - person Anvay; 15.06.2012
comment
@Anvay Если ответ Рибтока решил вашу проблему, вы должны принять его, нажав на галочку рядом с этим ответом. Это даст вам несколько очков репутации, а также пометит эту проблему как решенную. - person Levon; 15.06.2012
comment
Спасибо @Левон .. я этого не знал ..!!! Принял его ответ сейчас ..! - person Anvay; 15.06.2012

И n++, и n-- являются операциями post-increment/decrement.

Это означает, что значение переменной используется для оценки в текущем выражении сначала и только затем изменяется (т. е. увеличивается/уменьшается затем).

0 означает ЛОЖЬ в логическом выражении. Поскольку n изначально равно 0, тест в вашем первом if завершается неудачно, и оценивается предложение else.

В этот момент n стало 1 из-за n++ в первом тесте, так что это приводит к тому, что этот тест становится верным и

printf("ACTS"); 

быть казненным.

person Levon    schedule 15.06.2012

если(0++) ==> если(0) иначе если(1--) ==> иначе если(1)

поэтому ACTS печатается

person Elavarasan    schedule 15.06.2012

int n=0; 
if(n++)

Значение: проверить, а затем увеличить на 1.

int n=0; 
if(++n)

Значение: увеличить на 1, а затем проверить.

person Dzha    schedule 15.06.2012

Int всегда дает true, если только он не равен нулю. Оператор постинкремента i++ увеличивает переменную i после проверки. Если бы вы использовали оператор предварительного приращения ++i, приращение произошло бы до проверки.

person EvenLisle    schedule 15.06.2012

при проверке части IF значение n равно "0". А из-за i++ 'n' увеличивается на 1. Итак, теперь значение n равно 1. Таким образом, при вводе части ELSE, поскольку значение n равно 1, выполняется часть ELSE. И вы получаете вывод части ELSE.

person Tirumudi    schedule 15.06.2012

Сначала проверяется условие, что n != 0 и после будет увеличиваться значение n

person mathematician1975    schedule 15.06.2012

Операторы ++ и -- не только изменяют значение, но и возвращают значение. Поведение отличается в зависимости от позиции: ++var увеличивается и возвращает увеличенное значение, тогда как var++ увеличивается, но возвращает старое значение.

person mensi    schedule 15.06.2012
comment
Я почти уверен, что ++ и -- не имеют возвращаемого значения. Это модификаторы, а не функции. - person KevinDTimm; 15.06.2012

потому что я равен 0. ++i будет увеличиваться до оценки, i++ увеличивается после

person SetSlapShot    schedule 15.06.2012

Компилятор читает команду слева направо. Это означает, что сначала он проверяет, является ли условие истинным или ложным

if (n) 

а затем увеличивается/уменьшается

 n = n +/- 1
person Zain Khan    schedule 15.06.2012