Давайте рассмотрим ваш код:
#include <stdio.h>
Пока все хорошо ...
main()
{
- Функция
main()
всегда возвращает
int
. Всегда.
- Объявление функций без возврата
тип плохой формы, так как по умолчанию
int
, но люди не помнят
это легко при чтении кода.
Двигаемся дальше ...
long nc;
nc = 0;
Хорошая форма. Переменная инициализируется перед использованием.
while (getchar() != EOF)
++nc;
Это немного сложно. Но по одному шагу за раз.
- Функция
getchar
возвращает
int
со стандартного ввода.
- Это значение затем сравнивается с
EOF
.
- Если значение
int
из стандартного
ввод не EOF
, переменная
nc
увеличивается.
Таким образом, чтобы выйти из цикла while
, EOF должен быть сгенерирован из стандартного ввода.
Примечание: Ни одно из значений, считанных со стандартного входа, не сохранено . Каждое значение отбрасывается после вычисления выражения.
Стиль : я предлагаю использовать '{' и '}' после каждого оператора while
. Это безопасная привычка проникать.
printf("%ld\n", nc);
Приведенный выше оператор печатает (отображает) значение в nc
. Значение в nc
представляет количество символов, считанных из стандартного ввода. Этот оператор не отображает любые символы из стандартного ввода.
}
Наконец, программа main
должна возвращать значение операционной системе. Два переносимых значения: EXIT_SUCCESS
и EXIT_FAILURE
, которые определены в stdlib.h
. Указание одного из этих значений также будет хорошей привычкой.
Кстати, в приведенном вами примере нет putchar
(который я скопировал в этот ответ).