elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


  Mostrar Mensajes
Páginas: 1 [2] 3
11  Programación / Programación C/C++ / Escritura y lectura de archivos binarios en: 3 Septiembre 2014, 19:04 pm
Hola amigos, estoy tratando de hacer un código de archivo binario con array de estructuras pero no encuentro como hallar adecuadamente la lectura de los registros que introduzco con fread.

Si introduzco dos personas como en el ejemplo necesita de tres ocasiones para leerlas hasta llegar a final de archivo. No encuentro la manera sencilla de que haga las lecturas correctas de las personas que solicito a través de un número.

Dejo el código para conocer en que puedo estar fallando, gracias!!

Código
  1.  
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #define N 2
  6.  
  7. struct{
  8.    char nombre[20];
  9.    char ciudad[20];
  10.    int edad;
  11. }persona[N];
  12.  
  13. int main(void)
  14. {
  15.    char temporal[20];
  16.    char name[15]="gente.dat";
  17.    int i,numero,leo;
  18.    FILE *fichero;
  19.    if((fichero=fopen(name,"ab"))!=NULL){
  20.        do{
  21.            for(i=0;i<N;i++){
  22.                printf("\nIntroduzca nombre: ");
  23.                gets(persona[i].nombre);
  24.                if(strcmp(persona[i].nombre,"")!=0){
  25.                    printf("\nIntroduzca ciudad: ");
  26.                    gets(persona[i].ciudad);
  27.                    printf("\nIntroduzca edad: ");
  28.                    fgets(temporal,19,stdin);
  29.                    sscanf(temporal,"%d",&persona[i].edad);
  30.                    fwrite(&persona[i],sizeof(persona),1,fichero);
  31.                }
  32.            }
  33.        }while(strcmp(persona[i].nombre,"")!=0);
  34.        fclose(fichero);
  35.    }
  36.    else{
  37.        printf("\nError en apertura fichero");
  38.        exit(1);
  39.    }
  40.    if((fichero=fopen(name,"rb"))!=NULL){
  41.        do{
  42.                printf("\nIntroduzca numero de persona a visualizar: ");
  43.                fgets(temporal,19,stdin);
  44.                sscanf(temporal,"%d",&numero);
  45.                for(i=0;i<N;i++){
  46.                     if(numero==i){
  47.                        printf("\nNombre: %s",persona[i].nombre);
  48.                        printf("\nCiudad: %s\n",persona[i].ciudad);
  49.                        printf("Edad: %d",persona[i].edad);
  50.                        leo=fread(&persona[i],1,sizeof(persona),fichero);
  51.                    }
  52.                }
  53.        }while(leo!=0);
  54.        fclose(fichero);
  55.    }else{
  56.        printf("\nError en apertura fichero");
  57.        exit(1);
  58.    }
  59.    return 0;
  60. }
  61.  
  62.  
12  Programación / Programación C/C++ / Re: Ayuda con este código de archivos en: 26 Agosto 2014, 21:20 pm
Hola rir3760,

pufff que nivel, como te agradezco tu inmejorable explicación. La verdad que más claro y educativo imposible.

Saludos master!!

Pdata: buen post el que me indicaste, muchas veces tenemos las cosas enfrente de nuestros ojos y nos las vemos o el subsconciente nos juega malas pasadas, jajaja
13  Programación / Programación C/C++ / Ayuda con este código de archivos en: 25 Agosto 2014, 22:49 pm
Hola amigos,
tengo un problema con este código basado en archivos y no entiendo porque
en esta parte del programa me lee toda la cadena, cuando esperaba solo leyera y me mostrara por pantalla el nombre de la persona y no toda la cadena seguida de nombre, ciudad y edad.

Código
  1.  
  2.        fgets(persona.nombre,40,fichero);
  3.        puts(persona.nombre);
  4.  
  5.  

Este es el código completo:

Código
  1.  
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5. struct informe{
  6.    char nombre[40];
  7.    char ciudad[40];
  8.    int edad;
  9. }persona;
  10.  
  11. int main()
  12. {
  13.    char name[20]="gente.dat";
  14.    FILE *fichero;
  15.    fichero=fopen(name,"w");
  16.    if(fichero==NULL){
  17.        printf("\nEl archivo no existe\n");
  18.        exit(1);
  19.    }
  20.    else{
  21.        /*Escribo el archivo*/
  22.        printf("Introduzca nombre: ");
  23.        gets(persona.nombre);
  24.        fprintf(fichero,"%s",persona.nombre);
  25.        printf("Introduzca ciudad: ");
  26.        gets(persona.ciudad);
  27.        fprintf(fichero,"%s",persona.ciudad);
  28.        printf("Introduzca edad: ");
  29.        scanf("%d",&persona.edad);
  30.        fprintf(fichero,"%d",persona.edad);
  31.        fclose(fichero);
  32.    }
  33.  
  34.    /* Leo el archivo */
  35.    printf("\nEsto es lo que se ha introducido en el archivo:\n\n");
  36.    printf("_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\n");
  37.    fichero=fopen(name,"r");
  38.    if(fichero==NULL){
  39.        printf("\nEl archivo no existe\n");
  40.        exit(1);
  41.    }
  42.    while(feof(fichero)==0){
  43.  
  44.        fgets(persona.nombre,40,fichero);
  45.        puts(persona.nombre);
  46.        fgets(persona.ciudad,40,fichero);
  47.        puts(persona.ciudad);
  48.        fscanf(fichero,"%d",&persona.edad);
  49.        puts(persona.edad);
  50.    }
  51.    fclose(fichero);
  52. return 0;
  53. }
  54.  

Gracias, un saludo
14  Programación / Programación C/C++ / Re: Una mano en este caso de ficheros en: 25 Agosto 2014, 00:09 am
Hola Drewermerc,

gracias por contestar. En realidad no me muestra ningún error, sino que se iba a ejecutar la parte del else para mostrame el mensaje de "archivo no encontrado".

Pero me acabo de dar cuenta al comentarme que te funcionaba y era que no escribía su extensión, en este caso *.txt.

Muchas gracias, al menos me sirvió para darle otro toque a la imaginación de porqué no me funcionaba...

Saludos!!
15  Programación / Programación C/C++ / [Resuelto] Una mano en este caso de ficheros en: 24 Agosto 2014, 23:41 pm
Hola amigos tengo un problema con este código que estoy creando que trata sobre ficheros. Tengo creados varios ficheros en txt dentro del proyecto donde estoy construyendo el código pero no me permite abrirlo.

No se que estoy haciendo mal, gracias por su ayuda.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define N 25
  4.  
  5. int main(){
  6.  
  7.    FILE *fichero;
  8.    char name[40],cadena[100];
  9.    int contador=0;
  10.  
  11.    /* Esta parte de codigo verifico la existencia del fichero para posteriormente ser leído*/
  12.    printf("\nIntroduzca nombre de fichero, tendra 3 oportunidades\n");
  13.    printf("_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\n");
  14.    do{
  15.        printf("-->");
  16.        gets(name);
  17.        if((fichero=fopen(name,"r"))!=NULL){
  18.            printf("Fichero abierto correctamente!!\n");
  19.            printf("_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\n");
  20.  
  21.       }
  22.       else{
  23.            printf("Fichero no encontrado\n");
  24.            contador++;
  25.                if(contador==3)
  26.                    exit(1);
  27.        }
  28.       printf("\n");
  29.    }while(fichero==NULL);
  30.    /* Aqui trato de ir leyendo el fichero de 25 en 25 lineas */
  31.    do{
  32.            for(contador=0;contador<N;contador++){
  33.                    fgets(cadena,100,fichero);
  34.                        if(!feof(fichero))
  35.                                puts(cadena);
  36.            }
  37.            getchar();
  38.    }while(!feof(fichero));
  39.    fclose(fichero);
  40. return 0;
  41. }
  42.  
  43.  
16  Programación / Programación C/C++ / Re: Empezando con funciones en: 28 Mayo 2014, 23:39 pm
Hola amigo gracias por la aportación, he revisado de nuevo el código y lo he terminado de desarrollar tal y como deseaba.

Adjunto el código terminado:

Código
  1. /* programa calculo importe parking */
  2. #include <stdio.h>
  3.  
  4.    float calcularImporte(float _horas);
  5.  
  6.    int main(void){
  7.  
  8.        float horas,total=0,total2=0;
  9.        int contador;
  10.        printf("\n\tAutomovil \tHoras \t\tImporte");
  11.        for( contador=1; contador <=3; contador++ ){
  12.         printf("\n:");
  13.            scanf("%f",&horas);
  14.            total=total+calcularImporte(horas);
  15.            total2+=horas;
  16.            printf("\t");
  17.            printf("\t%d \t%f \t%f$",contador,horas,calcularImporte(horas));
  18.        }
  19.        printf("\n \t\t\tTotal %.2f \tTotal %.2f",total2,total);
  20.        printf("\n");
  21.    }
  22.  
  23.    float calcularImporte( float _horas ){
  24.  
  25.        float importe;
  26.        if(_horas<=3){
  27.            importe=2.00;
  28.        }else if (_horas>3 && _horas <24){
  29.            importe=2.00+_horas*0.5;
  30.        }else
  31.            importe=10.00;
  32.        return(importe);
  33.    }
  34.  

Saludos
17  Programación / Programación C/C++ / Empezando con funciones en: 27 Mayo 2014, 23:22 pm
Hola, estaba creando un programa simple para ir asimilando el concepto de inicio de funciones, pero tengo una duda en como podría obtener el total de importe que no me cuadra con lo que se clasifica individualmente por automóvil.

No se si podría realizar el cálculo como lo hago en la función principal o intentarlo con la llamada de otra función para que me retorne el total...

Ahí va mi parte de código:

Código
  1. /* programa calculo importe parking */
  2. #include <stdio.h>
  3.  
  4.    float calcularImporte(float _horas);
  5.  
  6.    int main(void){
  7.  
  8.        float horas,total=0;
  9.        int contador;
  10.        printf("\n\tAutomovil \tHoras \t\tImporte:");
  11.        for( contador=1; contador <=3; contador++ ){
  12.            scanf("%f",&horas);
  13.            printf("\t");
  14.            printf("\t%d \t%f \t%f$",contador,horas,calcularImporte(horas));
  15.            horas+=horas;
  16.            total=total+calcularImporte(horas);
  17.        }
  18.        printf("\n \t\t\tTotal %f \tTotal %f",horas,total);
  19.        printf("\n");
  20.    }
  21.  
  22.    float calcularImporte( float _horas ){
  23.  
  24.        float importe;
  25.        if(_horas<=3){
  26.            importe=2.00;
  27.        }else if (_horas>3 && _horas <24){
  28.            importe=2.00+_horas*0.5;
  29.        }else
  30.            importe=10.00;
  31.        return(importe);
  32.    }
  33.  
  34.  

Saludos y gracias
18  Foros Generales / Sugerencias y dudas sobre el Foro / Re: No puedo contestar a mi propio post creado en: 23 Mayo 2014, 19:29 pm
Hola,

gracias por la aclaración del tema.

Me hubiera gustado igualmente tener el post abierto para agradecer a las personas que me han ayudado de forma desinteresada a seguir adquiriendo conocimientos en este fabuloso mundo de la programación.

He leído el post y saco como conclusiones que no se pueden colocar códigos completos. En mi caso no son ayuda en mis tareas de clase ya que no tiene nada que ver sino con mi forma autodidacta de empezar a aprender a programar con el libro de Deitel.

Respeto la toma de decisión del moderador ya que pienso se lo exige la normativa pero no termino de compartirla o entenderla.

Saludos y gracias a todos los colaboradores y usuarios por compartir.
19  Foros Generales / Sugerencias y dudas sobre el Foro / No puedo contestar a mi propio post creado en: 23 Mayo 2014, 18:56 pm
Hola,

mi consulta es relacionada a un tema propuesto en la zona de programación en c-c++ donde no puedo responder a las personas que me han ayudado a comprender mis dudas relativas para tal creación de post.

Este es el post:
Código:
http://foro.elhacker.net/programacion_cc/ayuda_para_crear_tabla_de_conversion_de_decimales-t415077.0.html

En otros post si me permite responder sin presentar dicho mensaje.

Código:
Un error ha ocurrido
Este tema está bloqueado, no estás autorizado para publicar o modificar mensajes...

Me gustaría conocer el porqué de la anulación de mis respuestas.

Saludos y gracias
20  Programación / Programación C/C++ / Ayuda para crear tabla de conversión de decimales en: 21 Mayo 2014, 23:32 pm
Hola,

el problema que tengo es que no se como acertar en crear un bucle para sacar decimales del 1 al 256 y obtener su binario, octal y hex.

El objetivo final es poder crear una lista para números del 1 al 256 de conversión decimal a binario, decimal a octal y decimal a hex.

Primero he comenzado con la conversión del código de decimal a binario, realizando este código:

Código
  1.  
  2. #include <stdio.h>
  3.  
  4. /* conversor de decimal a binario */
  5.  
  6. int main(){
  7.  
  8.    int numero;
  9.  
  10.    printf("Introduzca un numero en decimal: ");
  11.    scanf("%d",&numero);
  12.    while(numero>=2){
  13.  
  14.        printf("\t%d",numero%2);
  15.        numero/=2;
  16.    }
  17.    printf("\t %d",numero);
  18.    printf("\n");
  19. }

Una vez conseguido la primera parte me propongo a crear la lista del 1 al 256, primero lo he intentado con un bucle for pero me creaba bucle infinito. Después he pasado a usar otro bucle while con variable contador para sacar decimales hasta el límite (256) pero no consigo interpretar como sacar la conversión de un decimal seguido del otro.

Aquí va como he tenido que dejar el código:

Código
  1. #include <stdio.h>
  2.  
  3. /* tabla decimal a binario,octal y hexadecimal */
  4.  
  5. int main(){
  6.  
  7.    int numero,contador=1;
  8.  
  9.    while(contador<=4){
  10.            numero=0;
  11.            numero++;
  12.            while(numero>=2){
  13.                    printf("Decimal %d \t%d",contador,numero%2);
  14.                    numero/=2;
  15.            }
  16.            printf("\t %d",numero);
  17.            contador++;
  18.    }
  19. }
  20.  

Gracias.

Un saludo
Páginas: 1 [2] 3
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines