Путаница с тем, как getchar () взаимодействует с stdin при передаче по каналу из пустого файла.
Вот простой код c test_program.c
#include <stdio.h>
int main( ) {
int c;
printf( "Enter a value :");
c = getchar( );
printf( "\nYou entered: ");
putchar( c );
printf( "\n");
printf( "Enter a value :");
c = getchar( );
printf( "\nYou entered: ");
putchar( c );
printf( "\n");
return 0;
}
Любопытно, что произойдет, когда я отправлю трубкупустой файл (a) в stdin ...
$ cat a | ./test_program
Enter a value :
You entered: �
Enter a value :
You entered: �
Полагаю, я ожидал, что test_program будет блокироваться до тех пор, пока я фактически не передам ему данные. Почему он читает из стандартного ввода, где файл a пуст и почему он также печатает мусор?