Подсчет входного потока - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Начал ознакомление с легендарным языком и сразу же столкнулся с, казалось бы, маленькими нюансами, которые вызывают огромные вопросы. Искренне надеюсь на вашу помощь. 1. На первом изображении программа выполняет подсчет вводимых с клавиатуры символов. При этом, счетчик прибавляет +1 каждый раз, когда введенное значение не имеет признака конца файла. Казалось бы все ясно, но возникает вопрос: полученная форма вывода - это результат того, что последнее значение счетчика запоминается в памяти, а компилятор перебирает последовательно каждый отдельный символ в слове? https://i.yapx.ru/BOrD.png 2. Следующее изображение - подсчет строк. Каждый раз, как компилятор встречает перенос, происходит прибавление в счетчике на единицу. Тут вопрос аналогичный, но лишь с привязкой к строкам. https://i.yapx.ru/BOrE.png 3. Последнее изображение касается программы, выполняющей подсчет строк, слов, и символов. Слово в данном случае определяется тем, присутствует ли признак окончания ввода слова (пробел, табуляция или перенос). Консоль опять же выводит такой "накопительный" результат. https://i.yapx.ru/BOrF.png В связи с этим резюмирующий вопрос: каким образом в данном случае все-таки работает компилятор, и почему, когда происходит явное указание признака конца файла после ввода символа (Прим: First^z) то компилятор не прекращает работу команды, а считает и последний символ тоже? Спасибо.

Решение задачи: «Подсчет входного потока»

textual
Листинг программы
  1.    
  2.     int c, nwhite, nother, ndigit;
  3.     ndigit = nwhite = nother = 0;
  4.  
  5.     while ((c = getchar()) != EOF)
  6.     {
  7.         if (c >= '0' && c <= '9' )
  8.         {
  9.             ++ndigit;
  10.         }
  11.        
  12.         else if (c == ' ' || c == '\t') // тут знак табуляции вам точно нужен?
  13.         {
  14.             ++nwhite;
  15.         }
  16.         else if (c == '\n' )
  17.         {
  18.             ++nwhite;
  19.             printf ("Digits = %d\n", ndigit);
  20.             printf ("BreakChars = %d\n", nwhite);
  21.             printf ("Other = %d\n", nother);
  22.             nwhite = 0;
  23.             nother = 0;
  24.             ndigit = 0;
  25.         }
  26.         else
  27.         {
  28.             ++nother;
  29.         }
  30.     }

Объяснение кода листинга программы

  1. Объявлены переменные c, nwhite, nother, ndigit, которые будут использоваться в коде.
  2. Инициализированы переменные nwhite, nother, ndigit равными нулю.
  3. Запускается цикл while, который будет выполняться до тех пор, пока символ c не станет равным EOF (End Of File).
  4. Внутри цикла проверяется значение символа c.
  5. Если символ c больше или равен '0' и меньше или равно '9', то увеличивается значение переменной ndigit на единицу.
  6. Если символ c равен ' ' или '\t', то увеличивается значение переменной nwhite на единицу.
  7. Если символ c равен '\n', то увеличивается значение переменной nwhite на единицу.
  8. Выводится значение переменной ndigit.
  9. Выводится значение переменной nwhite.
  10. Выводится значение переменной nother.
  11. Значение переменной nwhite сбрасывается в ноль.
  12. Значение переменной nother сбрасывается в ноль.
  13. Значение переменной ndigit сбрасывается в ноль.
  14. Если символ c не равен ' ', '\t' или '\n', то увеличивается значение переменной nother на единицу.
  15. Цикл while продолжается до тех пор, пока не будет выполнено условие окончания цикла.
  16. Значение переменной nother сбрасывается в ноль.
  17. Значение переменной ndigit сбрасывается в ноль.
  18. Значение переменной nwhite сбрасывается в ноль.
  19. Значение переменной nother сбрасывается в ноль.
  20. Значение переменной ndigit сбрасывается в ноль.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.667 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы