Вход для примеров от Кернигана и Ричи

В разделе 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 также является символом и также хранится в буфере клавиатуры, поэтому, если у вас есть новый ввод для чтения, сначала необходимо очистить буфер клавиатуры.

Другие вопросы по тегам