被困在c项目中

时间:2016-03-03 00:29:39

标签: c file structure

大家好,所以我必须为我的编程课做一个项目,我必须创建一个包含旅行代码及其目的地的文件,如果代码已经存在,我必须用新信息更新它。我试图这样做,但由于某种原因,我的程序在结束时不断崩溃。

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

typedef struct{
    int patente;
    float fecha;
    char dest[40];
    int cant;
}viajes;

FILE * abrir();
void main(void)
{
FILE * pf;
pf=abrir();
viajes viajes,vaux;

    printf("Ingrese Numero de patete: ");
    scanf("%d",&viajes.patente);
    fflush(stdin);
    while (viajes.patente!=0)
    {
        printf("Ingrese Fecha: ");
        scanf("%f",&viajes.fecha);
        fflush(stdin);
        printf("Destino: ");
        gets(viajes.dest);
        fflush(stdin);
        fseek(pf,0L,SEEK_END);
            if ( ftell(pf) == 0 )
            {
            viajes.cant=1;
            fwrite(&viajes,sizeof(viajes),1,pf);
            }
            else
            {
                fseek(pf,0L,SEEK_SET);
                fread(&vaux,sizeof(viajes),1,pf);
                while(!feof(pf)&&vaux.patente!=viajes.patente)
                {
                    fread(&vaux,sizeof(viajes),1,pf);
                if(feof(pf))
                {
                    viajes.cant=1;
                    fwrite(&viajes,sizeof(viajes),1,pf);
                }
                else
                {
                    fseek(pf,(-1L)*sizeof(viajes),SEEK_CUR);
                    vaux.cant++;
                    strcpy(vaux.dest,viajes.dest);
                    vaux.fecha=viajes.fecha;
                    fwrite(&vaux,sizeof(viajes),1,pf);
                }
                }

            }

    printf("Ingrese Numero de patete: ");
    scanf("%d",&viajes.patente);
    fflush(stdin);
    }
    fseek(pf,0,SEEK_SET);
    fread(&viajes,sizeof(viajes),1,pf);//lee un registro
    puts("Patente \t Fecha \t Destino \t Viajes");
    while(!feof(pf))
        {
            fread(&viajes,sizeof(viajes),1,pf);
            printf("\n%d \t %f \t %s \t %d",viajes.patente,viajes.fecha,viajes.dest,viajes.cant);
        }
    fclose(pf);
}

FILE * abrir(void)
{

    FILE * pf;
    pf = fopen("infcamion.jp","r+b");
    if(pf==NULL)
    {
        pf= fopen("infocamion.jp","w+b");
        if(pf==NULL)
        {
            perror("infocl.jp");
            exit(1);
        }

    }
    return pf;
}
编辑:我发布了完整的代码,我可以编译它没有任何警告或错误程序崩溃了我给的第二批信息

1 个答案:

答案 0 :(得分:0)

问题可能是scanf("%d",viajes.patente);。您需要将指针传递给scanf,而不是整数。确保在启用所有警告的情况下编译代码,编译器应标记这样的内容。