Existe verdaderamente el caracter EOF cuando se trabaja con la entrada estándar.
mi duda surge por la siguiente linea de código:
while((c=getchar())!=EOF){
.
.
.
}
el programa no termina nunca, es decir, se queda esperando.
Míralo de esta forma:
Es un flujo de datos y debe poder mover cualquier dato. Si tomara EOF como marca de final querría decir que no podría, en ningún caso, tomar ese valor aún fuera numérico para una operación matemática y por tanto se limitaría, de forma artificial, el rango de valores que pudiera tomar.