Cita de: wiD^ en 4 Septiembre 2014, 22:50 PMno entendí lo siguiente:En C "->" es un operador y se utiliza para en base a un puntero a estructura acceder al campo indicado. Donde sea que utilices "(*puntero).nombre_del_campo" puedes sustituirlo por "puntero->nombre_del_campo" con el mismo resultado.
* En ambas funciones utilizas la notación "(*variable).campo" cuando puedes acortar evitando los paréntesis con "variable->campo".
No entiendo a que te refieres con: variable->campo
Tomando tu programa como ejemplo puedes cambiar esta parte:
Código (c) [Seleccionar]
fgets((*clientes).apellido, 30, *db);
printf("%s\n", (*clientes).nombre);
A:
Código (c) [Seleccionar]
fgets(clientes->apellido, 30, *db);
printf("%s\n", clientes->nombre);
Cita de: wiD^ en 4 Septiembre 2014, 22:50 PMNo entiendo que hace el segundo whileEse bucle lee un carácter y lo descarta (lee otro) hasta encontrarse con uno que sea igual a EOF (indica error) o '\n' (indica el final de la linea). El objetivo de ello es descartar el resto de la linea ya que fscanf no lee por linea (fgets si y ahí empiezan los problemas que ya comente).
Cita de: wiD^ en 4 Septiembre 2014, 22:50 PMy cuando entraría adentro de esas llavesSiempre. Puedes tener un bloque delimitado por llaves en cualquier lugar donde una sentencia sea valida y no hay problema, el objetivo de utilizar un bloque es evitar un conflicto de nombres si, por alguna razón, ya existe una variable con el nombre "ch".
Un saludo