建立一个数据库,该数据库接收用户的输入(名字,姓氏,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
它假定显示其中包含信息的所有记录。但实际输出未显示任何记录。
答案 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
}