Функция отображения записи для отображения непустых записей, не отображающих записи - PullRequest
1 голос
/ 30 марта 2019

Настройка базы данных, которая принимает входные данные от пользователя (имя, фамилия, идентификационный номер и т. Д.) И вводит информацию в двоичный файл для обновления информации, удаления записей и обновления любой предоставленной информации. Кажется, что все другие функции функционируют должным образом (не обращайте внимания на плохой код, я довольно новичок в программировании), кроме функции отображения непустых записей. кажется, что информация сохраняется в файлах, потому что другие функции имеют к ней доступ (все тот же указатель файла). Я проверил, был ли файл перезаписан инициализацией пустого файла, и это не имело место в моем понимании.

Я проверил, был ли файл перезаписан инициализацией пустого файла, и это не имело место, насколько я понимаю. Я также попытался обновить оператор if в функции DisplayRecord, чтобы он считывал все файлы и отображал только те, которые имеют установленный идентификационный номер, но при запуске функции он по-прежнему показывает ноль.

   // fopen opens the file; exits if file cannot be opened
   if ((cPtr = fopen("patient.dat", "rb")) == NULL) {
  puts("File could not be opened.");
   }//end If
   else {

 printf( "Patient ID\t Last Name\t first name\t DOB \tGender\t Doctor ID\t 
 Doctor last name\t Room Number\n" );

 struct PatientData {
 unsigned int Pat_ID; //ID number
 char F_Name[25];//first name
 char L_Name[25]; //last name
 char Phone_num[20] ; //Phone number
 char gender[2];
 unsigned int doctor_ID;
 char doc_LN[25];
 unsigned int room_num;
 char DoB[10];
};

 //read all records until eof
 while(!feof(cPtr)){

 //create blank set to compare to data on file
  struct PatientData Patient= { 0, "","","","",0,"", 0,"" };

  int result=fread(&Patient,sizeof(struct PatientData), 1 , cPtr);

  if(result!=0 && Patient.Pat_ID!=0){
     printf("%-d%-15s%-15s%-10s%-12s%-15d%-15s%-10d\n",
     Patient.Pat_ID, 
     Patient.L_Name,Patient.F_Name,Patient.DoB,Patient.gender,
     Patient.doctor_ID, Patient.doc_LN,Patient.room_num);
  }
  fclose(cPtr); // fclose closes the file

Предполагается, что отображаются все записи, содержащие информацию. но фактический вывод не показывает никаких записей.

1 Ответ

0 голосов
/ 30 марта 2019

Используйте fread для управления циклом while.Продолжайте цикл, пока он возвращает 1.
В посте кажется, что fclose находится в цикле while.Убедитесь, что он находится за пределами while, но внутри else.
Добавьте счетчик и распечатайте его, чтобы увидеть, что что-то происходит.Если вы не получили распечатку счетчика, значит что-то не так.

struct PatientData {
    unsigned int Pat_ID; //ID number
    char F_Name[25];//first name
    char L_Name[25]; //last name
    char Phone_num[20] ; //Phone number
    char gender[2];
    unsigned int doctor_ID;
    char doc_LN[25];
    unsigned int room_num;
    char DoB[10];
};

// fopen opens the file; exits if file cannot be opened
if ((cPtr = fopen("patient.dat", "rb")) == NULL) {
    puts("File could not be opened.");
}//end If
else {
    int count = 0;
    struct PatientData Patient= { 0, "","","","",0,"", 0,"" };
    printf( "Patient ID\t Last Name\t first name\t DOB \tGender\t Doctor ID\t "
    "Doctor last name\t Room Number\n" );
    //read all records
    while( 1 == fread(&Patient,sizeof(struct PatientData), 1 , cPtr)) {
        printf ( "count = %d\n", count);
        count++;
        if( Patient.Pat_ID!=0){
            printf("%-d%-15s%-15s%-10s%-12s%-15d%-15s%-10d\n",
            Patient.Pat_ID, 
            Patient.L_Name,Patient.F_Name,Patient.DoB,Patient.gender,
            Patient.doctor_ID, Patient.doc_LN,Patient.room_num);
        }
    }
    fclose(cPtr); // fclose closes the file
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...