Hey. I'm making a system to retrieve data from a .txt file, but I keep getting 'Segmentation fault.' The program will compile but when I try to run it, it will crash. Here is the code, the problem being from fopen to fclose. I used this method before and it worked
Code:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct{
char fname[32];
char lname[32];
char address [64];
char phone [16];
char email [64];
char credit_num[16];
char credit_expiry[16];
char credit_bsb[4];
char licence_num[32];
int ID;
}customer;
int main(){
customer custData[128];
int ch;
char surname[32];
char fname[32];
FILE *cust;
char address[64];
char num[16];
char mail[64];
char crednum[16];
char expiry[16];
char bsb[4];
char licnum[32];
char line[128];
char *item;
int i = 0;
int reccount = 1;
int ID;
cust = fopen("customer.txt", "r"); //the problem is from somewhere here
while(fgets(line,127,cust))
{
item = strtok(line, ";");
strcpy(custData[reccount].fname, item);
item = strtok(NULL, ";");
strcpy(custData[reccount].lname, item);
item = strtok(NULL, ";");
strcpy(custData[reccount].address, item);
item = strtok(NULL, ";");
strcpy(custData[reccount].phone, item);
item = strtok(NULL, ";");
strcpy(custData[reccount].email, item);
item = strtok(NULL, ";");
strcpy(custData[reccount].credit_num, item);
item = strtok(NULL, ";");
strcpy(custData[reccount].credit_expiry, item);
item = strtok(NULL, ";");
strcpy(custData[reccount].credit_bsb, item);
item = strtok(NULL, ";");
strcpy(custData[reccount].licence_num, item);
item = strtok(NULL, ";");
custData[reccount].ID = atoi(item);
reccount++;
}
fclose(cust); //to here
printf("\nEnter customerID> ");
scanf("%d", &ID);
for(i=0;i<128;i++){
if(ID == custData[i].ID){
printf("First name> %s\nSurname> %s\nAddress> %s\nPhone Number> %s\nEmail Address> %s\nCredit Card Number> %s\nCredit Card Expiry> %s\nCredit Card BSB> %s\nLicence Number> %s\nCustomer ID> %d\n", custData[i].fname, custData[i].lname,custData[i].address,custData[i].phone,custData[i].email,custData[i].credit_num,custData[i].credit_expiry,custData[i].credit_bsb,custData[i].licence_num,custData[i].ID);
}
else
{
printf("CustomerID not found.");
}
}
}