Ver Mensaje Individual
  #2 (permalink)  
Antiguo 28/09/2013, 04:29
vosk
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Problema con Matriz en C.

Limpia el bufer de entrada despues de pedir datos por teclado; por ahi encontrarás mil versiones de esta misma funcion

Código C:
Ver original
  1. void fflush_stdin() {
  2.     int c;
  3.     while ((c = getchar()) != EOF && c != '\n');
  4. }

El scanf lo que hace es escanear los datos de la lista de entradas por teclado hasta dar con un entero (en caso que el formato sea de entero) o un final de cadena (en caso que sea un formato de texto). En tu codigo escaneas un entero, la funcion 'lee' el entero y deja en primera posicion del bufer de entrada el \0 que se envia al pinchar el enter; luego escaneas otro entero: la funcion omite cualquier caracter hasta dar con enteros (omite el primer caracter del buffer de entrada que era el anterior \0 no leido) y dejando el resto que vuelve a ser un \0 enviado con el enter. Luego entras en el ciclo: el scanf esta formateado para texto, luego lee los caracteres del buffer de entrada hasta dar con un final de cadena \0 que es precisamente el primer caracter del buffer que quedo despues del ultimo escaneado de entero. El primer scanf de texto lee el \0, lo quita del bufer y sigue el ciclo: en la segunda vuelta el buffer no contiene nada porque en la primera vuelta se 'leyó' el \0 y se aceptaron los datos sin pinchar el enter. En la segunda vuelta el bufer esta vacio asi que espera a que pinches el enter para aceptar los datos y asi sucesivamente. No se si te habré liado con esta explicacion, por ahi puedes encontrar mas detalles acerca del escaneado de teclado y su comprtamiento.

Saludos
vosk