显示记录功能以显示非空记录不显示记录

时间:2019-03-30 18:30:21

标签: c

建立一个数据库,该数据库接收用户的输入(名字,姓氏,ID号等),并将信息输入二进制文件,以更新信息,删除记录并更新提供的任何信息。除了显示非空记录的功能外,所有其他功能似乎都在正常运行(不要介意不良代码,这对编程尚不新鲜)。该信息似乎已保存到文件中,因为其他功能可以访问该信息(所有文件指针均相同)。我已经检查过文件是否被空文件的初始化所覆盖,但据我了解,情况并非如此。

我检查了空文件的初始化是否覆盖了文件,但据我了解,情况并非如此。我还尝试过更新DisplayRecord函数中的if语句,以便它将读取所有文件并仅显示具有已确定ID编号的文件,但在运行该函数时仍然显示null。

   // 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 :(得分:0)

使用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
}