RE:Para que acepte todo??
Hola
Cuando trabajas con caracteres debes tener cuidado, particularmente la manera como los capturas. Si vas a capturar una palabra como por ej."dos", asegúrate primero que todo que el arreglo donde lo vas a guardar sea grande.
char a;
scanf("%s",a);
Si en el programa anterior intentas guardar la palabra "dos", seguramente sólo te almacenará la letra 'd'. Debería de mostrarte un error o quizá un warning cuando tratas de hacer esto ya que el resto de la palabra quedará almacenada en cualquier lado de la memoria. Ahora bien, debes tener también en cuenta que cuando guardas un arreglo de caracteres, de último, el sistema coloca un '0' para indicar que hasta allí llega el arreglo. Para el ejemplo anterior, si pudieses ver el arreglo desde adentro lo que observarías sería 'd' 'o' 's' '0'. Te digo todo esto, para que cuando almacenes caracteres también tengas en cuenta este byte adicional.
Cuando trabajas con cadenas de caracteres también te enfrentas al problema de tener que utilizar espacios, por ej. para ingresar nombres compuestos
char a[100];
scanf("%s",a);
Si para el ejemplo anterior ingresas "Carlos Alberto", cuando lo fueses a mostrar por pantalla con un printf, por ej., sólo verías Carlos ya que este no tolera espacios y de ahí en adelante, el resto del texto se pierde. (Recuerda que para este caso no se utiliza el símbolo & antes del nombre de la variable a la hora de capturar el arreglo). Para este caso es mejor utilizar la función gets()
char a[100];
gets(a);
Para el caso anterior, si vuelves a ingresar el nombre compuesto se te guardará completo y no tendrás ningún problema.
Por último sólo te indico que debes tener cuidado con el tipo de información que guardas y la cantidad de memoria que necesitarás. Ya algo te señalé al comienzo de este resumen con el tipo char y en cierta forma se extiende para los otros casos. Si vas utilizar enteros trabaja con int. Si vas utilizar decimales trabaja con float o double, dependiendo del caso.
Suerte!!!!!!!