Bueno, este digamos que es el tipico problema que afronta todo programador de C cuando empieza y se da de golpes contra el input/output de C xD
Las soluciones de los otros compañeros son buenas y funcionan, pero yo quiero aportar otra solucion, ya que creo que es mas "correcta". Se trata de en vez de tratar de hacer hacks para que la funcion scanf funcione como queramos, usar funciones que funcionan bien, sin necesitad de hacer ningun truco extraño.
Estas dos funciones son por un lado fgets, que nos permite leer una cadena de un fichero, o en este caso del stdin, es decir del input del usuario y la otra sscanf, sí, con dos 's'. Esta función nos permite transformar la cadena que obtenemos en este caso a un entero.
Así que un ejemplo de lectura sería:
Y así tendriamos el número que el usuario ha entrado en la variable a.
Pero si eres un buen programador vago como deben ser los programadores dirás: Y cada vez que quiera leer un numero tengo que hacer eso, buf que palo...
Aquí es donde entra en juego hacer una función propia, aquí tienes dos opciones, que són más que nada estéticas dependiendo de si quieres leer los números así:
(nuestra función se llamará myscanf())
o como la scanf normal, es decir así:
Así que ahora procedo a poner las dos funciones, que simplemente tienes que poner en tu código y llamar cuando quieras obtener un valor numerico:
myscanf1, esta es la que no requiere ningun parámetro y devuelve un entero:
Código C:
Ver originalint myscanf()
{
char cad[10];
int a;
fgets(cad
,sizeof(cad
),stdin
);
return a;
}
Por otro lado, si lo que quieres es usar esta función como si fuera la propia scanf, usa esta función:
Código C:
Ver originalvoid myscanf2(char *a, int *b)
{
char cad[10];
fgets(cad
,sizeof(cad
),stdin
); }
Bueno, si tienes alguna duda con alguna de las funciones, no dudes en preguntar :)