Подсчет вводимых символов - C (СИ) (70422)
Формулировка задачи:
Добрый день!
решил приобщиться к прекрасному и в качестве старта выбрал книгу: "Язык программирования Си Брайан Керниган, Деннис Ритчи 3-е издание". пишу в консольке на mint17
есть в ней вот такой пример:
однако, окончание ввода и нажатие Enter не вызывают EOF. т.е. программа не выходит из цикла. если код
я что-то делаю не так или есть другая причина такого поведения кода?
#include <stdio.h> // подсчет вводимых символов. v1.0 main() { long nc; nc = 0; while (getchar() != EOF) ++nc; printf ("%ld\n", nc); }
printf ("%ld\n", nc);
поместить внутрь цикла - то он продолжает увеличивать nc после каждого последующего ввода символов + enter в книжке написано вот так:
Существует проблема: как отличить конец ввода от обычных читаемых данных. Решение заключается в том,
чтобы функция getchar по исчерпании входного потока выдавала в качестве результата такое значение,
которое нельзя было бы спутать ни с одним реальным символом. Это значение есть EOF (аббревиатура от end
of file — конец файла). Мы должны объявить переменную с такого типа, чтобы его "хватило" для
представления всех возможных результатов, выдаваемых функцией getchar. Нам не подходит тип char,
так как c должна быть достаточно "емкой", чтобы помимо любого значения типа char быть в состоянии
хранить и EOF. Вот почему мы используем int, а не char.
EOF — целая константа, определенная в <stdio.h>. Какое значение имеет эта константа — неважно, лишь
бы оно отличалось от любого из возможных значений типа char. Использование именованной константы с
унифицированным именем гарантирует, что программа не будет зависеть от конкретного числового
значения, которое, возможно, в других Си-системах будет иным.
Решение задачи: «Подсчет вводимых символов»
textual
Листинг программы
while ((с=getchar()) != EOF) ++nc; printf ("%d\n", c);
Объяснение кода листинга программы
В этом коде:
nc
объявляется как переменная для подсчета количества введенных символов.- Ввод данных осуществляется с помощью функции
getchar()
, которая возвращает следующий символ из стандартного ввода. - Цикл
while
продолжается до тех пор, покаgetchar()
не вернетEOF
(конец файла), что обычно происходит, когда пользователь вводит конец строки или завершает ввод. - Внутри цикла значение
nc
увеличивается на 1. - После окончания цикла, количество введенных символов, представленное переменной
nc
, выводится на экран с помощью функцииprintf()
. - Форматированная строка, которую выводит
printf()
, включает номер символа в формате%d\n
. В общем, этот код подсчитывает количество введенных символов, а затем выводит их количество.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д