I am running the following program from the C Programming Language book:
#include <stdio.h>
main()
{
  int c;
  while((c=getchar()) != EOF)
    putchar(); 
}
Or
#include<stdio.h>
int main(){
   int c = getchar();
   while(c != EOF){
      putchar(c);
      c = getchar();
   }
}
When I run this program, I get an unexplained behavior.  If I input characters from the command line in the following sequence: {'h', 'e', 'l', 'l', 'o', '\n', '^D'} then I get the following response printed to screen: hello, after \n is input, and the program quits once ^D in entered.
However, when I change the sequence as follows: {'h', 'e', 'l', 'l', 'o', '^D'} then I get the following response printed to screen: hello, but the program does not quit.  Shouldn't it quit once I enter ^D?  I have to enter ^D a second time for the program to quit.  OR the program only quits after I have entered ^D following \n.  I don't understand why the program doesn't quit no matter when I enter ^D.  Any thoughts?
I am running on a UNIX system.