Операция "запятая"

Операция "запятая"

     Операция "запятая" увеличивает гибкость использования цикла for, позволяя включать в его спецификацию несколько инициализирующих или корректирующих выражений. Например, ниже приводится программа, которая выводит на печать величины почтовых тарифов первого класса обслуживания. (Во время написания этой книги почтовые тарифы были такими: 20 центов за первую унцию и по 17 центов за каждую следующую.)

/* почтовые тарифы*/

#define FIRST 20

#define NEXT 17

main( )

{

int ounces, cost;

printf(" унциистоимость ");

for(ounces = 1, cost = FIRST; ounces <= 16; ounces++, cost+ = NEXT)

    printf(" %3d %7d " , ounces, cost);

}

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

унции          стоимость

   1                 20

   2                 37

   3                 54

     Мы воспользовались операцией "запятая" в первом и третьих выражениях: в первом случае она позволяет инициализировать переменные ounces и cost; во втором - на каждой итерации увеличивать значение ounces на 1, а cost на 17 (величину константы NEXT). Все вычисления осуществляются в спецификации цикла for. Применение операции "запятая" не ограничено только циклами for но именно в них она используется особенно часто. Операция обладает одним дополнительным свойством: при ее использовании гарантируется, что выражения, к которым она применяется (т. е. выражения, разделенные запятой), будут вычисляться слева направо. Поэтому переменная ounces будет инициализирована до переменной cost. В данном примере это не имеет значения, но порядок инициализации мог бы оказаться существенным, если выражение, соответвующее cost, содержало бы переменную ounces. Символ "запятая" также используется как разделитель. Поэтому запятые в операторах: char ch, date;

  

                                                            РИС. 8.4. Операция "запятая" и цикл for

ИЛИ

printf(" %d  %d ", chimps, chumps);

являются разделителями, а не знаками операции "запятая".


Следующая глава >>