/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Problema con editar datos :.

 
      Índice del Foro elrincondelc.com -> C/C++ en General
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
garibay1



Registrado: 30 Abr 2013
Mensajes: 1

MensajePublicado: 30/04/2013 5:08 pm
Título: Problema con editar datos :.

Saludos!

Tengo una pequeña complicación con un programa en "C".

Es un registro de usuarios, agrega información, los busca, etc...

El problema es que al editar un dato, al volver a hacer la consulta, se borra la información del registro excepto lo modificado.

Les dejo el código, mi problema es con "editar usuario" y que no se borre lo que NO se quiera modificar.


Ayuda, no se que hacer, al parecer se sobrescriben los datos...



El código es un poco largo, por lo que no puedo pegarlo... Dejo un enlace adjunto.
http://laboratoriosandoval.com/REG_Codigo.c
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 7204
Ubicación: Mexico

MensajePublicado: 01/05/2013 5:40 pm
Título:

Algunos comentarios sobre el programa:

* Evita el uso de la biblioteca conio de Borland, las razones de ello las puedes consultar en la sección FAQs y mediante el motor de búsqueda de los foros.

* No necesitas de dos tipos de datos "struct sRegistro" y "struct snewRegistro" ya que son idénticos. En su lugar se deben declarar dos variables de tipo "struct sRegistro" (y hay que evitar el uso de variables "globales").

* No declares variables con nombres que entren en conflicto con la biblioteca estándar. Declaras una variable con el nombre "exit", el problema ahí es tener una función homónima (exit cuyo prototipo se incluye con <stdlib.h>).

* La apertura de un archivo puede fallar por varios motivos como falta de privilegios, falla catastrófica, etc. Por ello no puedes concluir que la falla en la apertura del archivo se deba a que este no existe.

* Las funciones no necesitan del parámetro "clientzz", en su lugar declara esa variable como local a la función.

* Dales nombres descriptivos a las variables. Por ejemplo no utilices "clientzz" y "clientzzx" cuando puedes utilizar, por ejemplo, "entrada" y "auxiliar".

* No es necesario utilizar feof para controlar un bucle y lo usual es no recomendar esa función. Este bucle:
Código:
fread(®istro, sizeof(struct sRegistro), 1, clientzz);

while(!feof(clientzz) &&(encontrado != 1) ) {
   if(codigoBuscado == registro.codigo)
      encontrado = 1;
   fread(®istro, sizeof(struct sRegistro), 1, clientzz);
}

Se puede reducir a:
Código:
while (fread(®istro, sizeof registro, 1, clientzz) == 1)
   if (codigoBuscado == registro.codigo){
      encontrado = 1;
      break;
   }


* En ese mismo bloque el cierre del archivo solo debe realizarse si se abrió con éxito, en otras palabras la llamada a fclose debe colocarse dentro del bloque "else".

* El problema que mencionas se debe a la sentencia (dentro de la funcion "Modificar"):
Código:
if(encontrado == 1) {
   newregistro.newcodigo = codigoBuscado;
   
   /* ... */

Con ella solo copias en el nuevo registro el valor del campo "newcodigo", todos los demás se ignoran y con ello el comportamiento que mencionas.

Para solucionarlo solo tienes que copiar la estructura completa:
Código:
if (encontrado == 1){
   newregistro = registro;
   
   /* ... */


Un saludo
_________________
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Volver arriba
      Índice del Foro elrincondelc.com -> C/C++ en General
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com