大家好,所以我必须为我的编程课做一个项目,我必须创建一个包含旅行代码及其目的地的文件,如果代码已经存在,我必须用新信息更新它。我试图这样做,但由于某种原因,我的程序在结束时不断崩溃。
#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;
}
编辑:我发布了完整的代码,我可以编译它没有任何警告或错误程序崩溃了我给的第二批信息
答案 0 :(得分:0)
问题可能是scanf("%d",viajes.patente);
。您需要将指针传递给scanf
,而不是整数。确保在启用所有警告的情况下编译代码,编译器应标记这样的内容。