Eso se debe al uso intercalado de "scanf" y "gets" ya que la primera ignora el espacio blanco (con la mayoría de los especificadores) mientras que la segunda no.
Supongamos que tecleas:
Ese '2' se procesa y el resultado se almacena en la variable "n" pero el avance de linea se queda en el bufer de la entrada estándar. A continuación la función "gets" (es siempre mejor utilizar "fgets" en su lugar) se topa con el mencionado y lo considera una linea en blanco.
Para evitar eso se debe eliminar el resto de la linea justo después de la llamada a "scanf", por ejemplo:
Un saludo
Supongamos que tecleas:
Código [Seleccionar]
2{ENTER}
Ese '2' se procesa y el resultado se almacena en la variable "n" pero el avance de linea se queda en el bufer de la entrada estándar. A continuación la función "gets" (es siempre mejor utilizar "fgets" en su lugar) se topa con el mencionado y lo considera una linea en blanco.
Para evitar eso se debe eliminar el resto de la linea justo después de la llamada a "scanf", por ejemplo:
Código (c) [Seleccionar]
int ch;
/* ... */
scanf("%d",&n);
/* Descartamos el resto de la linea */
while ((ch = getchar()) != EOF && ch != '\n')
;
for (i = 0; i < n; i++){
printf("ingresa la cadena");
gets(a[i]);
}
Un saludo