Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - ProgramadorAnonimo

#1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


struct ARTI {
    short int ART;
    char COD[50];
    char DESC[100];
    char FAB[50];
    short int STOCK;
    int POS;
}    ;


int main()
{
    FILE * FP;
    struct ARTI X;


    if((FP = fopen("BDARTICULOSindexado","rb")) == NULL)
    {
        printf("\n\n\t ERROR EN LA APERTURA DEL ARCHIVO\n\n");
        exit(1);
    }

    fread(&X,sizeof(X),1,FP);
    printf("\n\n %5s %10s %30s %27s %8s %15s","ARTICULO","CODIGO","DESCRIPCION","FABRICANTE","STOCK","POSICION");

    while(!feof(FP))
    {
        printf("\n\n %5d %15s %35s %20s %8d %10d ",X.ART , X.COD , X.DESC , X.FAB , X.STOCK , X.POS);
        fread(&X,sizeof(X),1,FP);
    }


    fclose(FP);

    printf("\n\n\n\n");
}


El problema acá es que a la hora de ver en pantalla el printf con los datos muestra algunas cosas que están en la base de datos y otra parece basura del sistema; la base de datos es correcta porque ya la utilicé en otros programas. No se que hacer realmente, si me pudieran ayudar se los agradecería.

MOD: Etiqueta GeSHi
#2
Que tal, tengo unas dudas respecto a cuestiones con punteros en C que no logro entender,  espero que me puedan ayudar, se los agradecería mucho.

El codigo es el siguiente:

struct alumno{
    int legajo;
    char genero;
    char nombre[30];
    float promedio;
};

int main(){

struct alumno *P; // PUNTERO PARA EL VECTOR DE ESTRUCTURAS EN MEMORIA DINAMICA
   int I;


    P = (struct alumno*) malloc(3 * sizeof(struct alumno));


    printf("\n\n\t INGRESO DE LOS DATOS");


       for( I = 0 ; I < N ; I++)
        {
            printf("\n\n\t INGRESE EL NOMBRE : ");
            gets((P+I)->nombre);

            printf("\n\t INGRESE EL LEGAJO : ");
            scanf("%d", &((P+I)->legajo));

            printf("\n\t INGRESE EL GENERO : ");
            scanf("%c", &((P+I)->genero));

            printf("\n\t INGRESE EL PROMEDIO : ");
            scanf("%f", &((P+I)->promedio));
            fflush(stdin);
        }

Lo que no logro entender es por que en los scanf es necesario utilizar el operador & para su direccion en memoria. No es que al estar apuntando a un campo de la struct alumno ya es una dirección? Y por que en el caso del gets no necesito ponerlo? No lo entiendo.

Gracias por su tiempo!