Наступна програма лічить введені рядки. Як ми згадали вище, стандартна бібліотека забезпечує тим, щоб потік ввідного тексту з'являвся як послідовність рядків, кожен з яких закінчується символом нового рядка. Тому відлік рядків — це просто підрахунок символів нового рядка:
#include <stdio.h>
/* лічить рядки вводу */
main()
{
int c, nl;
nl = 0;
while ((c = getchar()) != EOF)
if (c == '\n')
++nl;
printf("%d\n", nl);
}
Корпус while тепер включає умову if, яка, в свою чергу, керує приростом ++nl. Твердженняif перевіряє умову в дужках, і якщо вона істинна, виконує наступне твердження (або групу тверджень у фігурних дужках). Ми знову намагались показати, що контролюється чим.
Подвійний знак рівності == є нотацією C для «рівний з» (подібний до одного знака = Pascal або.EQ мови Fortran). Використовуються два символи рівності ==, щоб відрізнити перевірку на рівність від одного =, який у C означає присвоєння. Невеличке застереження: новачки C іноді пишуть = там, де вони мають на увазі ==. Як ми побачимо з Розділу 2, результат зазвичай складає чинний вираз, тож ви не отримаєте жодного попередження.
Символ в одинарних лапках повертає ціле, рівне числовому значенню знака в наборі символів машини. Це називається символьною константою (сталою), а насправді — просто інший спосіб написання невеличкого цілого. Таким чином, наприклад, 'A' — це символьна константа, значення якої дорівнює 65 в наборі символів ASCII, — внутрішньому представленні знака A. Звичайно 'A' надається перевага перед 65, оскільки значення першого очевидніше, і не залежить від певного набору знаків.
Дозволяється також використання екранованих послідовностей, як символьні константи, тож'\n' означає значення символу нового рядка, яке дорівнює 10 в ASCII. Вам слід звернути увагу на те, що '\n' — це єдиний знак і у виразах є просто цілим числом, з іншого боку, "\n" — це ланцюжкова константа, яка, так сталося, що містить тільки один знак. Тему ланцюжків у порівнянні із символами розглянуто далі у Розділі 2.
Вправа 1-8. Напишіть програму з підрахунку пробілів, табуляції та нових рядків.
Вправа 1-9. Напишіть програму, яка би копіювала свій ввід до виводу, замінюючи кожний ланцюжок з одного або більше пробілів на єдиний пробіл.
Вправа 1-10. Напишіть програму, яка би копіювала свій ввід до виводу, замінюючи кожну табуляцію на \t, кожний реверс на \b і кожну зворотню похилу на \\. Це зробить табуляцію і реверси видимими у недвозначний спосіб.