Ver Mensaje Individual
  #3 (permalink)  
Antiguo 28/09/2013, 12:51
gorymeraz
 
Fecha de Ingreso: septiembre-2013
Mensajes: 2
Antigüedad: 11 años, 2 meses
Puntos: 0
Respuesta: Problema con Matriz en C.

Cita:
Iniciado por vosk Ver Mensaje
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
Si entendi mas o menos, pero que quieres decir con "\0"? con eso quieres decir el simbolo que leyo el scanf?

otra, donde debo de colocar la funcion para limpiar el buffer? antes del for me supongo yo?