Язык программирования C


Копирование файла - часть 2


c = getchar()

может быть использовано в выражении; его значение - просто значение, присваиваемое левой части. Если присваивание символа переменной 'c' поместить внутрь проверочной части оператора while, то программа копирования файла запишется в виде:

main() /* copy input to output; 2nd version */ { int c;

while ((c = getchar()) != EOF) putchar(c); }

Программа извлекает символ , присваивает его переменной 'c' и затем проверяет, не является ли этот символ признаком конца файла. Если нет - выполняется тело оператора while, выводящее этот символ. Затем цикл while повторяется. Когда, наконец, будет достигнут конец файла ввода, оператор while завершается, а вместе с ним заканчивается выполнение и функции main.

В этой версии централизуется ввод - в программе только одно обращение к функции getchar - и ужимается программа. Вложение присваивания в проверяемое условие - это одно из тех мест языка "C", которое приводит к значительному сокращению программ. Однако, на этом пути можно увлечься и начать писать недоступные для понимания программы. Эту тенденцию мы будем пытаться сдерживать.

Важно понять , что круглые скобки вокруг присваивания в условном выражении действительно необходимы. Старшинство операции != выше, чем операции присваивания =, а это означает, что в отсутствие круглых скобок проверка условия != будет выполнена до присваивания =. Таким образом, оператор

c = getchar() != EOF

эквивалентен оператору

c = (getchar() != EOF)

Это, вопреки нашему желанию, приведет к тому, что 'c' будет принимать значение 0 или 1 в зависимости от того, натолкнется или нет getchar на признак конца файла . Подробнее об этом будет сказано в лекции № 2.




Начало  Назад  Вперед