Иллюстрированный самоучитель по практике программирования

Выражения

В следующем примере осуществляется попытка прочитать два взаимосвязанных числа из стандартного ввода:

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++);

Попробуйте пропустить это выражение через разные компиляторы и посмотрите, что получается на практике.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.