Foros del Web » Programación para mayores de 30 ;) » C/C++ »

pueden darle un vistaso

Estas en el tema de pueden darle un vistaso en el foro de C/C++ en Foros del Web. hola tengo este codigo que al querer modificar algo no me deja me pueden hacer ver mi error gracias Código: #include <stdio.h> #include <conio.h> #include ...
  #1 (permalink)  
Antiguo 07/12/2009, 22:28
 
Fecha de Ingreso: octubre-2009
Mensajes: 19
Antigüedad: 14 años, 6 meses
Puntos: 0
pueden darle un vistaso

hola tengo este codigo que al querer modificar algo no me deja me pueden hacer ver mi error gracias
Código:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
FILE *fp;
struct Direc{
  char nume[6];
  char nom[15];
  char direc[15];
  char numtel[10];
  char mail[15];
}directorio;
//  ===  funciones ===
void crear();
// void anexar();
void modificar();
// void eliminar();
void reporte();

// ----------------PROGRAMA PRINCIPAL ----------------------------
void main()
{
  char resp;

  do
  {
    clrscr();
    printf("\n\n\t\t\t* * * * * MENU DE OPCIONES * * * * *");
    printf("\n\t\t---------------------------------------------------");
    printf("\n\t\t\t  DIRECTORIO DE EMPLEADOS   ");
    printf("\n\t\t-------------------------------------------------\n\n\n\n");
    printf("\t\t\t\t (1) CREAR EL DIRECTORIO  \n");
    printf("\t\t\t\t (2) ANEXAR EMPLEADOS     \n");
    printf("\t\t\t\t (3) MODIFICAR DATOS      \n");
    printf("\t\t\t\t (4) ELIMINAR             \n");
    printf("\t\t\t\t (5) REPORTE              \n");
    printf("\t\t\t\t (6) SALIR  ........        ");
    printf("\n\n\t\t\t\tSelecciona: ");
    resp=getchar();
    switch(resp)
	 {
	  case '1': crear();
			 break;
	  // case '2': anexar();
			// break;
	  case '3': modificar();
			 break;
	  // case '4': eliminar();
			// break;
	  case '5': reporte();
			break;
	  case '6' : exit(1);
    }
  }
  while(resp!='6');
}
// === Funcion de crear un archivo ==== elaborada por : Lilia Patricia Velasco H.
void crear()
{
   clrscr();
   char opcion = 's';
   if ((fp=fopen("directorio.dat","wb"))==NULL)
      printf("\n\n\n\n\t\t< < < Error de apertura de archivo directorio.dat   > > >");
   else
   {
     while(opcion == 's'){
        printf("\n\n Escribe el No. del empleado :");
        scanf("%s",&directorio.nume);
        printf("\n\n Escribe el nombre del empleado :");
        scanf("%s",&directorio.nom);
        printf("\n\n Escribe direccion del empleado :");
        scanf("%s",&directorio.direc);
        printf("\n\n Escribe el telefono del empleado :");
        scanf("%s",&directorio.numtel);
        printf("\n\n Escribe el correo electronico :");
        scanf("%s",&directorio.mail);
        fwrite(&directorio, sizeof(directorio), 1, fp);
        printf("\n\n\n\t\t Desea entrar otro empleado [s/n] : ");
	     opcion = getchar();
        getch();
     }
   }
   fclose(fp);
}
// === Funcion modificar ==== elabroada por : Hugo Abarca B.
void modificar()
{
		clrscr();
      int opc,i=0;
      char elim[6];
      printf("\nINGRESE LA CLAVE del empleado a modificar MODIFICAR: ");
      scanf("%s",&elim);
      fp=fopen("directorio.dat","r+b");
		if(!fp)
         printf("\n Error de apertura del archivo directorio.dat\n");
      else{
         while (((fread(&directorio, sizeof(directorio), 1, fp))!=0)&&i!=1){
            if(directorio.nume==elim){
               printf ("\nQUE DESEA MODIFICAR: ");
               printf ("\n\t\t\t1.-NOMBRE\n");
               printf("t\t\t2.-DIRECCION\n");
               printf ("\t\t\t3.-TELEFONO\n");
               printf("\t\t\t4.-correo electronico");
               scanf("%d",&opc);
               switch (opc){
                case 1:
                  printf ("\nINGRESA EL NOMBRE: ");
                  scanf("%s",&directorio.nom);
                  break;
                case 2:
                  printf ("\nINGRESA SU DIRECCION ");
                  scanf("%s",&directorio.direc);
                  break;
                case 3:
                  printf ("\nINGRESA SU NUMERO TELEFONICO ");
                  scanf("%s",&directorio.numtel);
                  break;
                case 4:
                 printf ("\nINGRESA su e-mail: ");
                 scanf("%d",&directorio.mail);
                 break;
               }
             fseek(fp,-sizeof(directorio),SEEK_CUR);
             fwrite(&directorio,sizeof(directorio), 1, fp);
             i=1;
             fclose(fp);
            }
         }
         i=0;
      }
}

// === Funcion reporte ==== elaborada por : Filemon Rodriguez Santillan
void reporte()   //funcion para generar el reporte de la informacion capturada
{
	clrscr();     // limpia la pantalla

	FILE *dire;   //Asigna un apuntador de tipo archivo

	dire = fopen("directorio.dat", "r");   //verifica la apertura en modo lectura del archivo en donde se almacena la informacion

	if(dire == NULL) // si el valor del apuntador es iguala NULO
	{
		printf("\nNo existe archivo");  // manda un mensaje de que no existe el archivo
	}

	fread(&directorio, sizeof(struct Direc), 1, dire);  //retorna el numero de caracteres leidos

	printf("\n\nNombre \tDireccion \tTelefono \tCorreo Electronico");   //imprime encabezado con los datos solicitados

	while(!feof(dire)) //mientras no sea fin de archivo
	{
			printf("\n%s \t%s \t%s \t%s", directorio.nom,         // imprime la informacion contenida dentro del archivo .DAT
			directorio.direc, directorio.numtel, directorio.mail);
			fread(&directorio, sizeof(struct Direc), 1, dire);
	}

	fclose(dire); // cierra el archivo
	getch();  //lee desde el teclado
}
faltan partes pero deberia de correr corectamente asi
  #2 (permalink)  
Antiguo 09/12/2009, 10:57
 
Fecha de Ingreso: diciembre-2009
Mensajes: 5
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: pueden darle un vistaso

es mejor que leas las cadenas con "gets" en lugar de scanf, scanf no introduce '\0' al final pero gets si, eso implica que si no termina en \0 para C es un array de char pero si acaban en \0 se trata como cadena
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:16.