Оно у тебя вообще скомпилировалось? В 4й строке ошибка. А вообще за такое использование условного оператора я бы руки поотрывал.
Лови, прохиндей:
int a[10] = {1, 0, 2, 0, 3, 4, 5, 6, 0, 8};
int sum = 0;
for (int i = 0, zeroesFound = 0; i < sizeof(a) / 4; i++, zeroesFound += (a[i] == 0) ? 1 : 0) sum += (zeroesFound >= 2) ? a[i] : 0;
Дикая для чтения, но короткая версия.
Лови, прохиндей:
int a[10] = {1, 0, 2, 0, 3, 4, 5, 6, 0, 8};
int sum = 0;
for (int i = 0, zeroesFound = 0; i < sizeof(a) / 4; i++, zeroesFound += (a[i] == 0) ? 1 : 0) sum += (zeroesFound >= 2) ? a[i] : 0;
Дикая для чтения, но короткая версия.
раскрыть ветку (9)
int a[10] = {1,0,1,2,0,1,1,1,0,1};
int sum = 0;
for(int i = 0,k=0; i < sizeof(a)/sizeof(int) ;k>1?sum+=a[i]:!a[i]&&++k,i++);
int sum = 0;
for(int i = 0,k=0; i < sizeof(a)/sizeof(int) ;k>1?sum+=a[i]:!a[i]&&++k,i++);
раскрыть ветку (1)
Пример хорош, +1, но вот это "!a[i]&&++k" не весьма безопасно. Хоть и "short-circuit evaluation" (если !a[i] ложно, то ++k не выполнится) для встроенных типов впринципе поддерживается большинством современных компиляторов, но всё зависит от конкретной реализации компилятора, так как SCE ещё в стандарт не вошло.
раскрыть ветку (6)
Тогда указывай условие реализации правильно. По стандарту С++ выражение "!k ? <no expression> : s+=a[i];" недопустимо.
Это допустимо только в GNU C (С != С++) да и то только в дополнении к GNU C.
Это допустимо только в GNU C (С != С++) да и то только в дополнении к GNU C.
раскрыть ветку (5)
раскрыть ветку (4)
раскрыть ветку (3)
раскрыть ветку (1)
Почему такая печаль? Большинство сервисов онлайн компиляторов опирается на реальные компиляторы) ideone.com тот же, для С/С++ - GCC.

