Полная версия этой страницы:
Задачка №1
Не пользуемся компилятором!Что будет выведено на экран?
#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. я знаю почему, просто задачка порадовала.
Единица, будет выведена, ибо "y++" не будет вычислено т.к. уже заранее известен результат &&(поведение по Стандарту).
Litkevich Yuriy
9.4.2008, 13:33
да вроде только "0"
Цитата(Litkevich Yuriy @ 9.4.2008, 14:33)
да вроде только "0"
Объясняй почему.
Цитата(Litkevich Yuriy @ 9.4.2008, 13:33)
да вроде только "0"
Проверил сейчас: единицу выводит
Архимед, редиска!
Я тож тебя люблю
.
Чёгт, пароль в упор не помню .
Litkevich Yuriy
9.4.2008, 13:45
хотя нет,
постинкремент по х и у в условии, потом x + y , тоды 2 получается
Ладно, пока ломайте голову, а я еще задачку дам, но в другой теме.
t;line-height:100%">Архимед, а ты запроси пароль новый выслать...
Litkevich Yuriy
9.4.2008, 13:54
я с компилил, но как получился результат не понял
побольше народу отметится, я все расскажу.
в принципе, логично, что единица - второе выражение в И все же вычисляться совсем не должно...
Litkevich Yuriy
10.4.2008, 5:08
хм, да я нашел у себя в заначке шпаргалки по "С", когда писал первые програмки под микроконтроллер PICmicro, об этом моменте, еслиб там вместо у была бы функция, она бы тоже не вызывалась, а я про это уже забыл, просто выработал правило, в условиях ничего невычислять, по возможности, видимо оно меня и спасает от таких казусов.
потому что if(x++) вернёт false, и поэтому if(x++ && (/*всё что угодно*/)) тоже вернёт false.
задачка очень порадовала.
Будет время найду еще парочку оригинальных задачек.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.