Mientras el bucle pide entrada hasta ctrl-d usando C

Quiero hacer un bucle while que continuamente está pidiendo a un usuario una entrada hasta que el usuario ctrl-d esté fuera de él. ¿Cómo puedo hacer esto correctamente? Estoy usando esto ahora mismo:

while (1) { printf("Enter host name: "); fgets(user_input, 1000, stdin); } 

Esto funciona, excepto que el usuario tiene que pulsar ctrl-c para finalizar el progtwig. Estoy deseando continuamente pedirle al usuario su opinión hasta que toque ctrl-d. ¿Cómo puedo hacer esto?

Tienes que probar EOF, que es lo que devuelve CTRL-D.

Así que haz esto:

 while ( fgets( ... ) != NULL ) { ... } 

EDITAR:

Ya que estás pidiendo, aún mejor sería:

 for ( ;; ) { printf( "enter input: " ); fflush( NULL ); // make sure prompt is actually displayed, credit Basile Starynkevitch if ( fgets( input, ... ) == NULL ) break; // handle input here } 

Un ctrl-d enviará un carácter EOF (final de archivo), que se traduce en fgets como un puntero NULO:

 while (fgets(user_input, 1000, stdin) != NULL) { // do stuff... } // no more user input