Doing an assignment for school and currently meet some problem
void modifyMember() {
FILE* selectedMember = fopen("selectedMember.txt", "r");
if (selectedMember == NULL) {
printf("Error: Unable to open selected member filen");
exit(-1);
}
char memID[10], memPass[10];
fscanf(selectedMember, " %[^|]|%[^|]|", memID, memPass);
fclose(selectedMember);
FILE* memberPtr = fopen("memberlist.txt", "r+");
FILE* tempPtr1 = fopen("tempfileNember.txt", "w");
if (memberPtr == NULL || tempPtr1 == NULL) {
printf("Error: Unable to open member list filesn");
return;
}
struct memberModule memMDL;
int found = 0;
rewind(memberPtr); // Rewind file pointer to beginning of file
while (fscanf(memberPtr, "%[^|]|%[^|]|%[^|]|%[^|]|%[^|]|%[^|]|%sn", memMDL.memberId, memMDL.name, memMDL.password, memMDL.passwordRecovery, memMDL.gender, memMDL.ic, memMDL.contactNumber) == 7) {
if (strcmp(memMDL.memberId, memID) == 0) {
found = 1;
// Show existing member details
printf("| Existing Member Details: |n");
printf("|-----------------------------------|n");
printf("| ID: %-30s|n", memMDL.memberId);
printf("| Name: %-28s|n", memMDL.name);
printf("| Gender: %-26s|n", memMDL.gender);
printf("| IC: %-30s|n", memMDL.ic);
printf("| Contact Number: %-18s|n", memMDL.contactNumber);
printf("|-----------------------------------|n");
// Modify member details
printf("| Enter new Name: |>> ");
rewind(stdin);
scanf(" %[^n]", memMDL.name);
while (!validateName(memMDL.name)) {
printf("Invalid format! Please enter a valid name (letters only): ");
scanf(" %[^n]", memMDL.name);
}
printf("| Enter new Gender(M/F): |>> ");
rewind(stdin);
scanf(" %s", memMDL.gender);
while (!validateGender(memMDL.gender)) {
printf("Invalid format! Please enter 'M' or 'F' for gender: ");
scanf(" %s", memMDL.gender);
}
printf("| Enter new IC: |>> ");
rewind(stdin);
scanf(" %[^n]", memMDL.ic);
while (!validateIC(memMDL.ic)) {
printf("Invalid format! Please enter a valid IC (12-digit number): ");
scanf(" %[^n]", memMDL.ic);
}
printf("| Enter new Contact Number: |>> ");
rewind(stdin);
scanf(" %[^n]", memMDL.contactNumber);
while (!validateContactNumber(memMDL.contactNumber)) {
printf("Invalid format! Please enter a valid contact number (10-digit number): ");
scanf(" %[^n]", memMDL.contactNumber);
}
// Write modified member details
fprintf(tempPtr1, "%s|%s|%s|%s|%s|%s|%sn", memMDL.memberId, memMDL.name, memMDL.password, memMDL.passwordRecovery, memMDL.gender, memMDL.ic, memMDL.contactNumber);
printf("|-----------------------------------|n");
printf("| Member Modified Details: |n");
printf("|-----------------------------------|n");
printf("| ID: %-30s|n", memMDL.memberId);
printf("| Name: %-28s|n", memMDL.name);
printf("| Gender: %-26s|n", memMDL.gender);
printf("| IC: %-30s|n", memMDL.ic);
printf("| Contact Number: %-18s|n", memMDL.contactNumber);
printf("|-----------------------------------|n");
}
}
fclose(memberPtr);
fclose(tempPtr1);
remove("memberlist.txt");
rename("tempfileNember.txt", "memberlist.txt");
if (!found) {
printf("| Member not found |n");
}
else {
printf("| Member modified successfully! |n");
}
return;
}
Here are my code, so after i modified the member info, the memberlist.txt still remain as the old one. When i want to use other function like search member and display member, the result is still the old one that havent updated yet. Nember is spell correctly btw.
New contributor
Guan is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.