Tengo un problema con archivos en eliminar y modificar
Hojala alguien me pueda ayudar mi codigo es el siguiente
#include<stdio.h>
typedef struct archivo
{
char nombre[15];
int edad;
char dir[20];
int mat;
int activo;
}ARCH;
ARCH a;
int contador=0;
main()
{
int clave;
int i,j;
char nom[15];
FILE *fp;
int opc,c;
printf("\n\n\n\t\tA R C H I V O S\n\n\n\n");
do
{
printf("\n\n1.- A L T A S\n");
printf("2.- M O S T R A R\n");
printf("3.- E L I M I N A R\n");
printf("4.- M O D I F I C A R\n");
printf("5.- SALIR\n\n");
printf("\tELIGE OPCION = ");
scanf("%d",&opc);
switch(opc)
{
case 1:
contador++;
a.activo=1;
fp = fopen("archivo.txt","a");
printf("\n\nINTRODUCE TU NOMBRE : ");
scanf("\n%[^\n]",a.nombre);
printf("INTRODUCE TU EDAD : ");
scanf("%d",&a.edad);
printf("INTRODUCE TU DIRECCION : ");
scanf("\n%[^\n]",a.dir);
printf("INTRODUCE TU MATRICULA : ");
scanf("%d",&a.mat);
fprintf(fp," %s , %d , %s , %d\n\n",a.nombre,a.edad,a.dir,a.mat);
fclose(fp);
break;
case 2:
fp = fopen("archivo.txt","r");
printf("\n\n\n ---- DATOS DEL ARCHIVO -----\n\n");
printf("\n N O M B R E | E D A D | D I R E C C I O N | M A T R I C U L A\n\n");
do
{
c = getc(fp);
putchar(c);
}while(c != EOF);
printf("\n\n\n\n\nPRESIONE LA TECLA G\n ");
if(getche()=='g')
system("clear");
fclose(fp);
break;
case 3:
printf("\n\nINTRODUCE LA MATRICULA A ELIMINAR : ");
scanf("%d",&clave);
break;
case 4:
printf("\n\nINTRODUCE LA MATRICULA: ");
scanf("%d",&clave);
while(fread(&a,sizeof(a),1,fp)==1)
{
if(clave == a.mat)
{
printf("\n\nINTRODUCE TU NOMBRE : ");
scanf("\n%[^\n]",a.nombre);
printf("INTRODUCE TU EDAD : ");
scanf("%d",&a.edad);
printf("INTRODUCE TU DIRECCION : ");
scanf("\n%[^\n]",a.dir);
printf("INTRODUCE TU MATRICULA : ");
scanf("%d",&a.mat);
}
}
break;
default:
printf("OPCION INCORRECTA\n");
}
}
while(opc<5 && opc>0);
getchar();
}
#include<stdio.h>
typedef struct archivo
{
char nombre[15];
int edad;
char dir[20];
int mat;
int activo;
}ARCH;
ARCH a;
int contador=0;
main()
{
int clave;
int i,j;
char nom[15];
FILE *fp;
int opc,c;
printf("\n\n\n\t\tA R C H I V O S\n\n\n\n");
do
{
printf("\n\n1.- A L T A S\n");
printf("2.- M O S T R A R\n");
printf("3.- E L I M I N A R\n");
printf("4.- M O D I F I C A R\n");
printf("5.- SALIR\n\n");
printf("\tELIGE OPCION = ");
scanf("%d",&opc);
switch(opc)
{
case 1:
contador++;
a.activo=1;
fp = fopen("archivo.txt","a");
printf("\n\nINTRODUCE TU NOMBRE : ");
scanf("\n%[^\n]",a.nombre);
printf("INTRODUCE TU EDAD : ");
scanf("%d",&a.edad);
printf("INTRODUCE TU DIRECCION : ");
scanf("\n%[^\n]",a.dir);
printf("INTRODUCE TU MATRICULA : ");
scanf("%d",&a.mat);
fprintf(fp," %s , %d , %s , %d\n\n",a.nombre,a.edad,a.dir,a.mat);
fclose(fp);
break;
case 2:
fp = fopen("archivo.txt","r");
printf("\n\n\n ---- DATOS DEL ARCHIVO -----\n\n");
printf("\n N O M B R E | E D A D | D I R E C C I O N | M A T R I C U L A\n\n");
do
{
c = getc(fp);
putchar(c);
}while(c != EOF);
printf("\n\n\n\n\nPRESIONE LA TECLA G\n ");
if(getche()=='g')
system("clear");
fclose(fp);
break;
case 3:
printf("\n\nINTRODUCE LA MATRICULA A ELIMINAR : ");
scanf("%d",&clave);
break;
case 4:
printf("\n\nINTRODUCE LA MATRICULA: ");
scanf("%d",&clave);
while(fread(&a,sizeof(a),1,fp)==1)
{
if(clave == a.mat)
{
printf("\n\nINTRODUCE TU NOMBRE : ");
scanf("\n%[^\n]",a.nombre);
printf("INTRODUCE TU EDAD : ");
scanf("%d",&a.edad);
printf("INTRODUCE TU DIRECCION : ");
scanf("\n%[^\n]",a.dir);
printf("INTRODUCE TU MATRICULA : ");
scanf("%d",&a.mat);
}
}
break;
default:
printf("OPCION INCORRECTA\n");
}
}
while(opc<5 && opc>0);
getchar();
}
Respuesta de estrujones
1