Программа не может найти конец файла в цикле и выводит последнюю запись структуры зацикливаясь - C (СИ)

Формулировка задачи:

Я уже просто не понимаю, ну все же там правильно, все должно работать, но нет, не может найти конец файла в цикле и выводит последнюю запись структуры зацикливаясь. Код поместил на pastebin. http://pastebin.com/9KkbMGqD
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
 
using namespace std;
 
const int N=15;
 
struct luggage
   {
           char FullName[16];
           int Seats;
           int Weight;
   }   Base;
   
void AddRecordDatabase(FILE *);
 
int main()
   {
           system("CLS");
           
           int Temp=0, Flag=0;
           int i=0, j=0, k=0;
           
           char DatabaseName[]="Databaseluggage.dat";
           char Choice;
           
           FILE *TextDatabase;
           TextDatabase=fopen(DatabaseName, "wb+");
       
       while(true)
          {
               
              printf("Add a record to a database? Enter Y/N \n");
              scanf("%s", &Choice);   printf("\n");
             
              if (Choice=='N')
                 {
                         printf("Entering values database stopped \n");
                         system("CLS");
                         fclose(TextDatabase);
                        break;
                 }
              else
                 {
                         AddRecordDatabase(TextDatabase);
                         system("CLS");
                 }
          }
       
       TextDatabase=fopen(DatabaseName, "rb");
       
       while(!feof(TextDatabase))
          {
                  fread(&Base, sizeof(Base), 1, TextDatabase);
                  printf("%d. %s %d %d \n", i, Base.FullName, Base.Seats, Base.Weight);
                  i++;
          }
       
           
           
             
             
           
           getch();
           
           printf("\n");
           system("PAUSE");
          return EXIT_SUCCESS;
   }
 
 
 
void AddRecordDatabase(FILE *TextDatabase)
   {
      printf("Enter the full name \n");
      scanf("%s", &Base.FullName);   printf("\n");
       
      printf("Enter the number of seats occupied luggage \n");
      scanf("%d", &Base.Seats);   printf("\n");;
       
      printf("Enter the weight of luggage \n");
      scanf("%d", &Base.Weight);   printf("\n");
     
      fwrite(&Base, sizeof(Base), 1, TextDatabase);
   }
P.S. Одногруппник сделал вместо Choice, Choice[2] и сравнивать начал через strcmp, и выводить началось по две записи, вот вообще, эта переменная никак не влияет на ход работы.

Код к задаче: «Программа не может найти конец файла в цикле и выводит последнюю запись структуры зацикливаясь - C (СИ)»

textual
 
...
    scanf("%c", &Choice);
...
    if (!(TextDatabase=fopen(DatabaseName, "rb")))
    {
        printf("Error! \n");
        system("CLS");
        return EXIT_SUCCESS;
    }
       
    while(fread(&Base, sizeof(Base), 1, TextDatabase))
    {
        printf("%d. %s %d %d \n", i, Base.FullName, Base.Seats, Base.Weight);
        i++;
    }
...
void AddRecordDatabase(FILE *TextDatabase)
{
    printf("Enter the full name \n");
    scanf("%s", &Base.FullName);   printf("\n");
       
    printf("Enter the number of seats occupied luggage \n");
    scanf("%d", &Base.Seats);   printf("\n");;
       
    printf("Enter the weight of luggage \n");
    scanf("%d", &Base.Weight);   printf("\n");
     
    fwrite(&Base, sizeof(Base), 1, TextDatabase);
    
    getchar(); // !!!
}

11   голосов, оценка 3.818 из 5


СОХРАНИТЬ ССЫЛКУ