Выражения
В следующем примере осуществляется попытка прочитать два взаимосвязанных числа из стандартного ввода:
scanf ("' &yr, &profit[yr]);
Выражение неверно, поскольку одна его часть изменяет уг, а другая использует ее. Значение profit[yr] будет правильным только в том случае, если новое значение уг будет таким же, как и старое. Вы, наверное, думаете, что все дело в порядке вычисления аргументов, однако в действительности проблема здесь в том, что все аргументы scanf вычисляются до того, как эта операция вызывается на выполнение, так что &profit[yr] всегда будет вычисляться с использованием старого значения у r. Проблемы подобного рода могут возникнуть в любом языке программирования. Для исправления достаточно опять же разбить выражение на две части:
scanf("%d", &yr); scanf("%d", &profit[yr]);
Будьте осторожны с любым выражением, вызывающим побочные эффекты.
Упражнение 1.4
Улучшите каждый из приведенных фрагментов:
Упражнение 1.5
Найдите ошибку в приведенном фрагменте:
Упражнение 1.6
Перечислите все возможные варианты, которые выдаст приведенное выражение в зависимости от порядка вычислений:
? n=1 ? printf(."%d %d\n", n++, n++);
Попробуйте пропустить это выражение через разные компиляторы и посмотрите, что получается на практике.