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

    Выражения

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

    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, чтобы сообщить об этом редактору.