Tienes que utilizar un ciclo de repetición, yo he usado while() en donde capturas cada pulsación de tecla pero no la muestras en pantalla hasta despues de validarla. el bucle sigue leyendo hasta que el usuario pulsa Entrar (como lo hace scanf() o gets()); lo cual se corresponde con el caracter de retorno de carro.
A continuación te posteo un pequenio programa con un par funciones que hacen todo el trabajo.
#include <stdio.h>
#include <stdlib.h>
#include <conio.h> /* No Ansi C */
#define MAX 14 /* máxima cantidad de caracteres en la entrada (numJuegos) */
/* prototipo */
unsigned long int obtNumero( void );
/* la función main() comienza la ejecución del programa */
int main()
{
unsigned long int num;
system( "cls" );
printf( " Ingrese n%cmero: ", 163 );
num = obtNumero();
printf( "
su n%cmero es %lu
", num );
getch(); /* pausa */
return 0; /* indica terminación exitosa */
} /* fin de main() */
/* IMPLEMENTACIÓN DE FUNCIONES */
usigned long int obtNumero( void )
{
}
/* devuelve un puntero a la cadena "s" que contiene un N(Natural) */
char *obtNatural( char *s, const int max )
{
register char c;
int i = 0;
char *strcatchr( char *cad, char c, int *t ); /* prototipo */
/* iniciar la cadena a nulo */
s[0] = ' '; // *s = ' ';
/* mientras no se pulse retorno de carro */
while ( (c = (char)getch() ) != '
' ) {
/* si pulsa Backspace y hay caracteres en la cadena */
if ( c == '' && i > 0 ) {
putchar( c );
putchar( ' ' );
putchar( c );
i--;
s[i] = ' ';
}
else {
/* si hay espacio en la cadena */
if ( i < max ) {
/* si pulsa un dígito */
if ( c >= '0' && c <= '9' ) {
putchar( c );
strcatchr(s, c, &i);
}
}
}
}
putchar( '
' );
return s;
}
/* concatena el caracter 'c' a la cadena apuntada por "cad" */
char *strcatchr( char *cad, char c, int *t )
{
cad[*t] = c;
(*t)++;
cad[*t] = ' ';
return cad;
}