Dev - C++ - Problema con función Switch Case

   
Vista:
Imágen de perfil de Martin Larrosa

Problema con función Switch Case

Publicado por Martin Larrosa martnahuel95@gmail.com (19 intervenciones) el 27/04/2016 16:46:32
Trato de crear un programa que permita diferentes tipos de cálculos con dos matrices de distintas dimensiones (nxm) y (pxq). Todo bien hasta que entra en el ciclo Switch. (Parece como que autocarga una opción no válida antes de que permita al usuario ingresar una).
Soy un programador autodidacta y lo hago por puro Hobby... Me vendría bien una ayuda en esto ya que estoy estancado en ese problema desde hace un día. Desde ya Muchas gracias, adjunto el documento '.cpp'
Soy de Paraguay, Estudiante de Ingeniería Electromecánica.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Problema con función Switch Case

Publicado por agustin (305 intervenciones) el 27/04/2016 23:14:51
No puedo verlo desde el movil pero por lo que describes diría que usas un scanf o similar y que se queda el salto de línea en el buffer de entrada. Prueba a poner un getchar() detrás del scanf.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Martin

Problema con función Switch Case

Publicado por Martin (19 intervenciones) el 28/04/2016 05:30:27
Me solucionaste la vida!!! Te lo agradezco un montón! de igual manera, me gustaría saber cuál es la razón de ese error o problema! Si lo supieses en detalles me gustaría que me lo expliques... No me conformo con sólo parchar un problema... Muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema con función Switch Case

Publicado por agustin (305 intervenciones) el 28/04/2016 07:46:43
A ver, cuando introduces por ejemplo una cadena, scanf coge del buffer de entrada todo lo que has introducido hasta que se encuentra con un salto de línea que es lo que introduces en el buffer al pulsar intro. Entonces el salto de línea sigue en el buffer de entrada y en próximas llamadas lo seguirá encontando en el buffer. Hay varias soluciones a esto:
1.usas getchar y sacas así del buffer dicho salto de línea.
2.usas fgets en lugar de scanf ya que fgets captura también el salto.
3.usas fflush(stdin) cuyo uso con buffer de entrada no está definido y puede que funcione o no ya que fflush es para buffer de salida.

En tu caso la mejor opción es la primera ya que supongo que capturas un número y fgets captura cadenas.
Podrías crearte una pequeña función que limpie el buffer después de cada scanf y que consistiría en un bucle while el cual capture con un getchar todo lo que haya en el buffer y vas repitiendo hasta que encuentres un salto de línea que seria el último carácter que capturarias:
1
2
3
4
5
6
void clean_stdin (){
   char c;
   do {
      c=getchar ();
   }while (c != '\n');
}
Cuando usamos scanf capturamos una cadena por ejemplo hasta llegar a un salto de línea o hasta llegar a un espacio. Si introduces "perico perez" solo capturarias "perico" y en el buffer quedaría el resto con lo que en la próxima llamada a scanf no esperará a que introduzcas nada porque ya tiene datos en el buffer. Con la función que te puse limpias el buffer.
Algo aun mejor:
1
2
3
4
5
6
7
void clean_stdin()
{
   int c;
   do {
       c=fgetc (stdin);
   }while( c != EOF && c != '\n' );
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Martin

Problema con función Switch Case

Publicado por Martin (19 intervenciones) el 28/04/2016 16:13:41
Perfecto, muchísimas gracias Agustín! Te lo agradezco!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar