Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ С\С++ _ Задачка №1

Автор: ViGOur 9.4.2008, 13:23

Не пользуемся компилятором!

Что будет выведено на экран?

#include <iostream>

int main(int argc, char** argv)
{
  int x = 0;
  int y = 0;

  if (x++ && y++)
  {
    y += 2;
  }

  std::cout << x + y << std::endl;

  return 0;
}
И почему? :)

p.s. я знаю почему, просто задачка порадовала. :)

Автор: Архимед 9.4.2008, 13:29

Единица, будет выведена, ибо "y++" не будет вычислено т.к. уже заранее известен результат &&(поведение по Стандарту).

Автор: Litkevich Yuriy 9.4.2008, 13:33

да вроде только "0"

Автор: ViGOur 9.4.2008, 13:34

Цитата(Litkevich Yuriy @ 9.4.2008, 14:33) *
да вроде только "0"
Объясняй почему. :)

Автор: Архимед 9.4.2008, 13:37

Цитата(Litkevich Yuriy @ 9.4.2008, 13:33) *
да вроде только "0"

Проверил сейчас: единицу выводит

Автор: ViGOur 9.4.2008, 13:39

Архимед, редиска! :)

Автор: Архимед 9.4.2008, 13:42

Я тож тебя люблю :wub:.
Чёгт, пароль в упор не помню :rolleyes:.

Автор: Litkevich Yuriy 9.4.2008, 13:45

хотя нет,
постинкремент по х и у в условии, потом x + y , тоды 2 получается

Автор: ViGOur 9.4.2008, 13:49

Ладно, пока ломайте голову, а я еще задачку дам, но в другой теме. :)

t;line-height:100%">Архимед, а ты запроси пароль новый выслать... ;)

Автор: Litkevich Yuriy 9.4.2008, 13:54

я с компилил, но как получился результат не понял :(

Автор: ViGOur 9.4.2008, 13:57

побольше народу отметится, я все расскажу. :)

Автор: Novak 9.4.2008, 23:33

в принципе, логично, что единица - второе выражение в И все же вычисляться совсем не должно...

Автор: Litkevich Yuriy 10.4.2008, 5:08

хм, да я нашел у себя в заначке шпаргалки по "С", когда писал первые програмки под микроконтроллер PICmicro, об этом моменте, еслиб там вместо у была бы функция, она бы тоже не вызывалась, а я про это уже забыл, просто выработал правило, в условиях ничего невычислять, по возможности, видимо оно меня и спасает от таких казусов.

Автор: rich 10.4.2008, 20:46

потому что if(x++) вернёт false, и поэтому if(x++ && (/*всё что угодно*/)) тоже вернёт false.
задачка очень порадовала. :)

Автор: ViGOur 11.4.2008, 8:09

Будет время найду еще парочку оригинальных задачек. :)

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)