• Sábado 21 de Diciembre de 2024, 13:06

Autor Tema:  Re: Ayuda Con Archivos(pregunta Sencilla)  (Leído 1380 veces)

jalonsher

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Ayuda Con Archivos(pregunta Sencilla)
« en: Sábado 5 de Junio de 2004, 18:22 »
0
Lo que pasa es lo siguiente tengo la siguiente estructura

struct empleado {
  char cve_tra[5] ;
  char nombre[50];
  char rfc[12];
  char puesto[20];
  char departamento[20];
  char tipopago[2];
  float salariod;
  int dias;
  float pagoneto;
};



y leo los datos asi


 char sal[6],di[6];

    printf("\nDame la clave del empleado:  ");
    fgets(e.cve_tra,5, stdin);
    EliminarRetornoLinea(e.cve_tra);



    printf("\nDame el nombre del empleado:  ");
    fgets(e.nombre,50,stdin);
    EliminarRetornoLinea(e.nombre);


    printf("\nDame elRFC del empleado:  ");
    fgets(e.rfc,12,stdin);
    EliminarRetornoLinea(e.rfc);

    printf("\nDame el Puesto del empleado: ");
    fgets(e.puesto,20,stdin);
    EliminarRetornoLinea(e.puesto);


    printf("\nDame el Departamento del empleado: ");
    fgets(e.departamento,20, stdin);
    EliminarRetornoLinea(e.departamento);

    printf("\nDame el tipo de pago del empleado: ");
    fgets(e.tipopago,2,stdin);
    EliminarRetornoLinea(e.tipopago);

    printf("\nDame el Salario Diario del empleado: ");
    fgets(sal,4,stdin);
    e.salariod = atof(sal);


    printf("\nDame el No. dias Trabajados del empleado: ");
    fgets(di,6,stdin);
    e.dias = atoi(di);


el problema es el siguiente, cuando capturo los datos los estoy capturando, algunas veces se pasa algunos campos y no me los pide que los ingrese.

por ejemplo capturo la clave y despues se pasa al rfc, y no me pide que ingrese el nombre.

y otras veces capturo el tipo de pago y no me captura el pago por dia y se pasa directamente al numero de dias trabajados.


Ademas me gustaria saber como guardar los datos en el archivo

con el siguiente formato.


001 antonio heaj8105 supervisor sistemas 1000 10 995

o sea con un espacion en blanco entre cada campo, y la siguiente vez que entre lo ponga en la siguiente linea,por que los datos los pone en el mismo renglon.



Agradeciendo de antemano su respuesta. :unsure:

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Ayuda Con Archivos(pregunta Sencilla)
« Respuesta #1 en: Sábado 5 de Junio de 2004, 23:22 »
0
deberias ser mas puntual y colocar un fragmenmto de codigo localizado ya que muy pocos tendran tiempo para leerlo.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

AbBaDoN

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Ayuda Con Archivos(pregunta Sencilla)
« Respuesta #2 en: Domingo 6 de Junio de 2004, 00:32 »
0
:ph34r:  :ph34r:  :ph34r:
Para guardar el archivo con los datos, tye aconsejo grabes la estructura completa una a continuacion de la otra, es mas comodo para leerlas despues:

fwrite(&emp, sizeof(emp), 1, arch)

donde emp es tu estructura y arch el archivo donde guardar. No importa cuantos datos esten llenos en la estructura ni cuanto midan los campos (por ahi tenes una clave que usa 3 char nomas y otra usa los 5) siempre te guarda la estructura completa.

En cuanto a las peticiones de los campos creo que es mejor modularizarlo con otra funcion que te pida las cadenas y te las copie:

void getline (char * src, int len, char * msg) {

int i;
printf("%s\n",msg);
for(i = 0; i < len; ++i) {
        src = (char) getche();
        if (src == '\r') break;
        }
src='\0';
}

En fin, espero que te sirva
 :devil:

mortiz

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
Re: Ayuda Con Archivos(pregunta Sencilla)
« Respuesta #3 en: Domingo 6 de Junio de 2004, 06:28 »
0
Hola:

Tu problema es muy comun en c ansi: lo que pasa es que el compilador trabaja con buffers para llenar los campos, en cada campo recoge el valor en las primeras posiciones, pero deja basura en las siguientes si el campo anterior era mas largo que el actual, y si el siguiente es corto, lo salta porque tiene valores para poner ahi y seguir.
Para liquidar el problema agrega una funcion llamada

void basura(void){
char(80) basura; // lleva corchetes, mis corchetes del teclado no los encuentro.
gets(basura);
return;
}

Esta funcion la debes llamar despues de cada lectura de campo.

Ojo: Si quieres evitarte este y muuuchos problemas posteriores, usa sscanf(), aun mejor, prueba con MFC de Visual C++.

Saludos.
www.elxux.net

pmike

  • Miembro activo
  • **
  • Mensajes: 62
    • Ver Perfil
    • http://www.autoresponder.com
Re: Ayuda Con Archivos(pregunta Sencilla)
« Respuesta #4 en: Martes 8 de Junio de 2004, 21:10 »
0
Puede ser q te faltase la funcion flushall(), q limpia el buffer de los datos, y por eso te salta de la linea y no lleva la secuencia q tu quieres
-------------------------------------------------------------

http://www.ebookred.com

-------------------------------------------------------------