Eso no hay forma de hacerlo, lo que si puedes hacer es leerlo en forma de cadena (carácter a carácter) y posteriormente pasarlo a entero, ya que al leer carácter a carácter si que puedes controlar la pulsación de enter únicamente.
Una vez leída esa cadena, ya sería cuestión de chequear si se han introducido caracteres inválidos, etc
A! y el tamaño que podría tener esa cadena sería de 7 caracteres (6 + mas el fin de cadena), teniendo en cuenta los límites de los enteros, que van de -32767 to 32767 (incluido el signo negativo)
EI: juntando mensajes.Aquí te va un programilla que te he hecho para sacar los números (de tipo double), después ya sería pasarlos a un array, lo cual sería tarea muy facil, y además con el entero que devuelve la función "obtenerNumero()" podrás controlar muy bien si los números introducidos son correctos
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void leerCadena(char *, int);
int obtenerEntero(char *, double *);
int main(){
char cadena[7];
double numero;
int res;
printf("\nIntroduce el numero: "); leerCadena(cadena, sizeof(cadena));
res = obtenerEntero(cadena, &numero);
printf("\nNumero introducido: %f <<%d>>\n\n", numero
, res
);
return(0);
}
//Función que leerá una cadena por teclado
//Recibirá por parámetros un puntero a char, el cual apuntará a la cadena a rellenar
//y el tamaño máximo que tendrá la misma. Como resultado, la cadena apuntada por el puntero
//contendrá la cadena de caracteres introducida por teclado.
void leerCadena(char * cadena, int tamano){
int i=0;
char aux; //Variable temporal en la que se irá guardando cada caracter introducido
fflush(stdin
);//--->Limpiamos buffer
aux
= getchar();//------->Hacemos lectura del primer caracter, por si el primer //caracter es el fin de linea (cadena vacía), para que
//se compruebe en el siguiente while
while(i<tamano-1 && aux!='\n'){//---->Lectura de la "cadena" caracter a caracter, para así poder ir comprobando cada uno de
cadena[i] = aux; //los caracteres hasta que se encuentre un "retorno de carro" o se supere el limite
aux
= getchar(); //de caracteres de la cadena menos 1 (menos uno para reservar el último para el fin de cadena) i++;
}
cadena[i] = '\0';//--->Agregamos el fin de cadena al final de nuestro vector de caracteres
}
//Función que transformará una cadena de caracteres en un entero (en caso de ser posible).
//Recibirá por parámetros un puntero a char, el cual apuntará a la cadena a transformar
//y un puntero a entero, el cual apuntará al entero en el que se guardará el entero (buscado)
//una vez transformada la cadena. Los parámetros de salida de la función serán 1 en caso
//de que el número sea correcto, -1 en caso de que la cadena de caracteres contenga algún
//caracter inválido (que no corresponda a entero), o 0 en caso de que sea vacío el entero.
int obtenerEntero(char * cadena, double * numero){
int tamano = 0; //Variable en la que se almacenará el tamaño de la cadena
int numPunt = 0; //Variable que contendrá el número de puntos (decimales) encontrados
char aux; //Variable temporal en la que se irá guardando cada caracter de la cadena
int res; //Variable que retornará la función
aux = cadena[tamano];//-->Comprobamos el primer caracter, por si el primer
//caracter es el fin de linea (cadena vacía), para que
//se compruebe en el siguiente while
//Recorrido de la cadena hasta que encuentre el final de cadena, o encuentre un
//caracter no permitido (distinto de un dígito o de .), o hasta que lea más de
//dos puntos (..), lo cual se considerará también cadena erronea.
while(aux != '\0' && (aux>=48 && aux<=57 || aux==46) && numPunt<=1){
if(aux==46){
numPunt++;
}
tamano++;
aux = cadena[tamano];
}
if(tamano == 0){//Si el tamaño es 0 la cadena está vacia (devuelve 0)
numero = '\0';
res = 0;
}else if(aux != '\0'){//Si no ha llegado al final, la cadena es erronea (devuelve -1)
numero = '\0';
res = -1;
}else{//En cualquier otro caso el número será válido (devuelve 1) y en el contenido
//del double apuntado por el puntero "numero" se introducirá la cadena
//transformada a double con atof()
res = 1;
}
return(res);
}