Вы можете протестировать свою программу, используя (с оболочкой POSIX) here documents.
Первый скомпилировать исходный код mycode.c
в двоичный mybin
с
gcc -std=c99 -Wall -Wextra -g mycode.c -o mybin
(это может быть clang
или cc
вместо gcc
)
затем запустить mybin
с "здесь документ" как
./mybin << EOF
here is my
input
EOF
Вы также можете использовать перенаправление ввода. Запаситесь файл myfile.txt
и запустить ./mybin < myfile.txt
Можно даже запустить программу на своем собственном исходном коде: ./mybin < mycode.c
И вход даже из какой-нибудь трубы, например, ls * | ./mybin
Кстати, вы наблюдаете за тем, что stdin
, когда он является терминалом, буферизируется по строке. См. this answer (большинство из них должно применяться к MacOSX).
Обратите внимание, что ваш код некорректен: вы пропускаете #include <stdio.h>
в верхней части файла, и ваш main
должна быть действительно int main(int argc, char**argv)
(BTW вы могли бы улучшить свою программу так, что, когда аргументы приводятся, они имена файлов, чтобы быть читать).Наконец окончание printf
, несомненно, показывают, -1, который, как правило, значение EOF
Кроме того, это намного лучше закончить строку управления форматом printf
с \n
или же использовать надлежащим образом fflush(3)
Обратите внимание, что с истекшим -file является не входа (или действительным char
), это условие на некотором входной файл поток, как stdin
, а функция getchar(3) задаются для возврата EOF
который является int
вне диапазона char
(на моем Linux системный tem EOF
- -1, потому что char
-s находятся между 0 и 255 включенными). Вы можете проверить конец-в-файл состояние после некоторых операций ввода (никогда раньше!) С помощью feof(3)
Терминала в обычном приготовленном режиме обрабатывается ядром так, что при нажатии Ctrl D конец файла условие запускается в файловом дескрипторе (часто STDIN_FILENO
т.е. 0), относящемся к этому терминалу.
Вам нужно нажать Enter хотя бы один раз, прежде чем нажать Ctrl-D. –
@PaulGriffiths это действительно так? –
@ dattran он должен печатать -1 или что-то в этом роде. вы уверены, что вам не хватает o/p из-за отсутствия '\ n' в заявлении на печать? –