Code:
#include <stdlib.h>#include <stdio.h>
#include <time.h>
#include <string.h>
typedef struct{
int date;
char c;
}STR;
void deleteData(char*, FILE*);
main () {
FILE *data;
STR one, two, three, four, five, random = {0};
char deleteMe[128];
srand(time(NULL));
one.c = (rand() % 25) + 65;
one.date = rand() % 31;
two.c = (rand() % 25) + 65;
two.date = rand() % 31;
three.c = (rand() % 25) + 65;
three.date = rand() % 31;
four.c = (rand() % 25) + 65;
four.date = rand() % 31;
five.c = (rand() % 25) + 65;
five.date = rand() % 31;
data = fopen("C:\\My Files\\ex12struc.dat", "r+b");
if (data == NULL){
printf("Unable to open file!");
exit(-1);
}
fwrite(&one, sizeof(STR), 1, data);
fwrite(&two, sizeof(STR), 1, data);
fwrite(&three, sizeof(STR), 1, data);
fwrite(&four, sizeof(STR), 1, data);
fwrite(&five, sizeof(STR), 1, data);
fclose(data);
printf("Displaying File: ex12struc.dat contents: \n\n");
data = fopen("C:\\My Files\\ex12struc.dat", "r+b");
while(fscanf(data, "i", random.date) != EOF){
fread(&random, sizeof(STR), 1, data);
printf("%i\n", random.date);
printf("%c\n", random.c);
printf("\n");
}
fclose(data);
printf("Enter an integer or character you would like to DELETE from the file:");
scanf("%s", deleteMe);
printf("\n\n");
printf("%s\n", deleteMe);
deleteData(deleteMe, data);
system("pause");
}
void deleteData(char *deleteMe, FILE *fp){
char deleted[128];
STR random = {0};
fp = fopen("C:\\My Files\\ex12struc.dat", "r+b");
while (fscanf(fp, "s", deleted) != EOF){
fread(&deleted, sizeof(STR), 1, fp);
if (deleted[0] == *deleteMe){
deleted[0] = 0;
fwrite(deleted, sizeof(deleted), 1, fp);
}
else if (*deleteMe == deleted[4]){
deleted[4] = 7;
fwrite(deleted, sizeof(deleted), 1, fp);
}}
fclose(fp);
fp = fopen("C:\\My Files\\ex12struc.dat", "r+b");
printf("\n\n");
while(fscanf(fp, "s", deleted) != EOF){
fread(&random, sizeof(STR), 1, fp);
printf("%i\n", random.date);
printf("%c\n", random.c);
printf("\n");
}
fclose(fp);
}
In the deleteData function it compares the information fine, changes the value in deleted it goes over the write fine but then when I reprint the information nothing is changed. Any ideas?