title: C language - record data (add,delete) in text file using file IO, structure, function, array, pointers
body: <p>I'm still learning intro to C language. Currently I'm having problem with my code. The task is to ask user to input information about staff and write them into a text file. The problem occur when:</p>
  
  <p>1) output in text/.exe file display random characters.</p>
  
  <p>2) a new output will overwrite the existing information in the text/.exe file</p>
  
  <p>3) the delete function unable to delete correctly after the first time i delete a staff information in text file.</p>
  
  <p>I would be so happy if I can solve any of these 3 problem :)</p>
  
  <p>The code is as follows:</p>
  
  <pre><code>#include &lt;stdio.h&gt;
  #include &lt;stdlib.h&gt;
  
  void Menu();
  void New_Staff();
  void Delete_Staff();
  void Export_Profile();
  
  struct element{
      char id[20];
      char name[20];
      char gender[20];
      char phone[20];
      char email[20];
  }profile;
  
  int main(void){      //The program will continue running until option 4 selected                                   
      int a;  
  
      for(a=0;;a++){
         Menu();
      }
      return 0;
  }
  
  void Menu()      //Main Menu to select option
  {
      int n;
      printf("\n**********************************************");
      printf("\nMAIN MENU-STAFF INFORMATION SYSTEM");
      printf("\n**********************************************");
      printf("\n1. Add profile Staff Profile");
      printf("\n2. Delete Staff Profile");
      printf("\n3. Export All Profiles to 'output.txt'");
      printf("\n4. Exit");
      printf("\n**********************************************");
      printf("\nPlease enter your option&lt; 1 / 2 / 3 / 4 &gt;: ");
      scanf("%d", &amp;n);
  
      switch(n){
      case 1:
          New_Staff();
          break;
      case 2:
          Delete_Staff();
          break;
      case 3:
          Export_Profile();
          break;
      case 4:
          printf("\n*** Thanks for using the program! Goodbye. ***");
          exit(0);
          break;
      default:
          printf("\nError! Wrong Number is Entered\nPlease Try Again");
          break;
      }
  }
  
  void New_Staff()                        //Add New Staff Profile 
  {   
      int x;
      struct element profile;
  
      printf("\n===Add New Staff Profile===");
      printf("\n\nPlease enter the following staff information.");
  
      printf("\n\nStaff ID: ");
      scanf("%s", &amp;profile.id);
  
      printf("Name\t: ");
      fflush(stdin);
      fgets(profile.name,20,stdin);
  
      for(x=0 ; x&lt;20 ; x++)
      {
      if(profile.name[x] == '\n')
          profile.name[x] = '\0';
      }
  
      printf("Gender\t: ");
      scanf("%s", &amp;profile.gender);
  
      printf("Phone\t: ");
      scanf("%s", &amp;profile.phone);
  
      printf("Email\t: ");
      scanf("%s", &amp;profile.email);
  
      printf("\nSYSTEM: New Staff Profile is Added Successfully.");
  
  }
  
  void Delete_Staff()         //Delete Staff Profile
  {                   
      FILE *fRead, *fWrite;
      char *TextFile;
      char c;
      int Delete_Id, temp = 1;
  
      TextFile="output.txt";
  
      fRead = fopen(TextFile, "r");
      c = getc(fRead);
  
      while (c != EOF){
      printf("%c", c);
      c = getc(fRead); 
      }
  
      rewind(fRead);
  
      printf("\nDelete Staff with ID: ");
      scanf("%d", &amp;Delete_Id);
  
      Delete_Id=Delete_Id+1;
  
      fWrite = fopen("copy.c", "w");
      c = getc(fRead);
      while (c != EOF) {
      c = getc(fRead);
      if (c == '\n')
      temp++;
      if (temp != Delete_Id){
      putc(c, fWrite); 
         } 
      }
  
      fclose(fRead);
      fclose(fWrite);
  
      remove(TextFile);
  
      rename("copy.c", TextFile);
      printf("\nThe contents of file after being modified are as follows:\n");
  
      fRead = fopen(TextFile, "r");
      c = getc(fRead);
      while (c != EOF) {
      printf("%c", c);
      c = getc(fRead);
      }
  
      fclose(fRead);
  }
  
  void Export_Profile()           //Export Staff Profile to Text
  {       
      struct element profile;
  
      FILE *fPtr;
      fPtr=fopen("output.txt","w");
      FILE *fPtr1;
      fPtr1=fopen("output.txt","a+");
  
      if (fPtr == NULL)
      printf("Error in opening file\n");
      if (fPtr1 == NULL)
      printf("Error in opening file\n");
  
      fprintf(fPtr,"%10s %10s %10s %10s %10s","Staff","ID",
               "Name","Gender","Phone","Email");
  
      fprintf(fPtr1,"\n%10s %10s %10s %10s %10s", profile.id, profile.name,   
               profile.gender, profile.phone, profile.email);
  
      printf("\n%10s %10s %10s %10s %10s", "Staff", "ID", "Name",
               "Gender", "Phone",  "Email");
      printf("\n%10s %10s %10s %10s %10s", profile.id, 
               profile.name, profile.gender, profile.phone, profile.email);
  
      printf("\nSYSTEM: All staff profile have been exported to output.txt file");
  
      fclose(fPtr);
      fclose(fPtr1);
  }
  </code></pre>
  
  <p>I'm sorry for the long code. I not really sure where problem lies.  </p>
  
  <p>The output give this:</p>
  
  <pre><code>**********************************************
  MAIN MENU-STAFF INFORMATION SYSTEM
  **********************************************
  1. Add profile Staff Profile
  2. Delete Staff Profile
  3. Export All Profiles to 'output.txt'
  4. Exit
  **********************************************
  Please enter your option&lt; 1 / 2 / 3 / 4 &gt;: 1
  
  ===Add New Staff Profile===
  
  Please enter the following staff information.
  
  Staff ID: 1
  Name    : Carmen Gray
  Gender  : Female
  Phone   : 123-4567890
  Email   : carmen@live.com
  
  SYSTEM: New Staff Profile is Added Successfully.
  **********************************************
  MAIN MENU-STAFF INFORMATION SYSTEM
  **********************************************
  1. Add profile Staff Profile
  2. Delete Staff Profile
  3. Export All Profiles to 'output.txt'
  4. Exit
  **********************************************
  Please enter your option&lt; 1 / 2 / 3 / 4 &gt;: 3
  
   Staff         ID       Name     Gender      Phone
     °²#                @Γg╕∙         ∙
  SYSTEM: All staff profile have been exported to output.txt file
  **********************************************
  MAIN MENU-STAFF INFORMATION SYSTEM
  **********************************************
  1. Add profile Staff Profile
  2. Delete Staff Profile
  3. Export All Profiles to 'output.txt'
  4. Exit
  **********************************************
  Please enter your option&lt; 1 / 2 / 3 / 4 &gt;: 2
  
   Staff         ID       Name     Gender      Phone
     °²#                @Γg╕∙        .
  
  Delete Staff with ID: 1
  
  The contents of file after being modified are as follows:
   Staff         ID       Name     Gender      Phone
  </code></pre>
  
  <p>and the text file display this:</p>
  
  <pre><code>   Staff         ID       Name     Gender      Phone
       øý#                @âg¸ù         ù           
  </code></pre>