Вход для примеров от Кернигана и Ричи
В разделе 1.5.2 2-е изд. K&R вводит getchar() и putchar() и дает пример подсчета символов, затем подсчета строк и других по всей главе.
Вот программа подсчета символов
#include <stdio.h>
main() {
long nc;
nc = 0;
while (getchar() != EOF)
++nc;
printf("%ld\n",nc);
}
откуда должен поступить ввод? ввод в окно командной строки терминала и нажатие клавиши ввода работали для программы копирования файлов, но не для этого. Я использую XCode для Mac.
Кажется, что самый простой способ - это прочитать текстовый файл с путем "pathway/folder/read.txt", но у меня тоже есть проблемы с этим.
2 ответа
В интерактивной командной строке нажмите ctrl-D после новой строки или ctrl-D дважды не после новой строки, чтобы завершить ввод. Тогда программа увидит EOF и покажет вам результаты.
Чтобы передать файл по пути и избежать интерактивной части, используйте <
оператор перенаправления оболочки, ./count_characters < path/to/file.txt
,
Стандартные функции ввода C начинают обрабатывать то, что вы вводите, только когда вы нажимаете клавишу ВВОД IOW. Каждая клавиша, которую вы нажимаете, добавляет символ в системный буфер (оболочку). Затем, когда строка завершена (т.е. вы нажимаете Enter), эти символы перемещены в стандартный буфер C getchar()
читает первый символ в буфере, который также удаляет его из буфера. Каждый последующий вызов getchar()
читает и удаляет следующий символ и так далее. Если вы не читаете каждый символ, который вы ввели в буфер клавиатуры, но вместо этого вводите другую строку текста, тогда следующий вызов getchar()
после этого продолжит чтение символов, оставшихся от предыдущей строки; вы обычно будете свидетелями того, как программа пройдет мимо вашего второго входа. Кстати, символ новой строки от клавиши Enter также является символом и также хранится в буфере клавиатуры, поэтому, если у вас есть новый ввод для чтения, сначала необходимо очистить буфер клавиатуры.