Su código hasta que lea una sola palabra, luego se cierra. Entonces, si le das varias palabras, leerá la primera y saldrá, mientras que si le das una entrada vacía, se repetirá para siempre. En cualquier caso, solo imprimirá basura al azar de la memoria no inicializada. Esto aparentemente no es lo que quieres, pero ¿qué quieres? Si lo que desea es leer e imprimir la primera palabra (si existe), utilice si:
if (scanf("%15s", word) == 1)
printf("%s\n", word);
Si desea bucle mientras se puede leer una palabra, utilice mientras:
while (scanf("%15s", word) == 1)
printf("%s\n", word);
Además, como han dicho otros, es necesario dar la palabra conjunto un tamaño que es lo suficientemente grande para su scanf:
char word[16];
otros han sugerido pruebas para EOF en lugar de comprobar cuántos elementos scanf emparejados. Eso está bien para este caso, donde scanf no puede fallar a menos que exista un EOF, pero no es tan bueno en otros casos (como tratar de leer números enteros), donde scanf podría no coincidir sin alcanzar EOF (si la entrada no es t un número) y devuelve 0.
edición
Parece que ha cambiado su pregunta para que coincida con el código que funciona muy bien cuando lo ejecuto - bucles de la lectura de palabras hasta que se alcanza EOF y luego se cierra. Así que algo más está sucediendo con su código, tal vez relacionada con la forma en que lo está alimentando de entrada según lo sugerido por David
¿Qué entrada estás utilizando? ¿Está redirigiendo un archivo a 'stdin', o escribiendo en la consola? Si es este último, ¿qué sistema operativo está usando y cómo está escribiendo en el EOF? –