在保存到文件的结构中线性搜索元素

Posted

技术标签:

【中文标题】在保存到文件的结构中线性搜索元素【英文标题】:Linear search for an element within structures saved to file 【发布时间】:2016-02-23 22:01:32 【问题描述】:

我有一个模块可以搜索文件以查找索引,如果找到它应该打印与该索引相关的详细信息。程序编译运行,但不管病人是否被保存,都会打印出病人没有找到。我错过了什么逻辑错误?

注意:patientCount 是一个全局变量,每次添加患者时都会写入另一个文件并更新。

void patientSearch(struct patientRec patient[], struct apptRec appt[])
    
    system("cls");
    int c=0;
    char search[6], admit;

    printf("Enter the patient ID of the patient you would like to search for.\n");
    scanf("%i", &search);
    fflush(stdin);

    FILE *fp;

    fp=fopen("patients.txt", "r");
    if(fp==NULL)
    
        printf("\nError opening file!");
    
    else
    

        for (c=0; c<patientCount; c++)
        
            if (search==patient[c].patientID)
            
                printf("\nPatient found.\n\n");
                printf("Patient ID: %i", patient[c].patientID);

                fscanf(fp, "%s", patient[c].fName);
                printf("\nPatient First Name: ");
                puts(patient[c].fName);

                fscanf(fp, "%s", patient[c].sName);
                printf("\nPatient Surname: ");
                puts(patient[c].sName);

                fscanf(fp, "%i %c", patient[c].age, patient[c].sex);
                printf("\nPatient Age: %i\nPatient Sex: %c", patient[c].age, patient[c].sex);

                fscanf(fp, "%s", patient[c].notes);
                printf("\n\nNotes: \n");
                puts(patient[c].notes);
            
            else
            
                fscanf(fp, "\n");
            
        
    

    fclose(fp);
    if (c==patientCount)
    
        printf("\nThis patient does not exist. Would you like to admit this patient?\n1: Yes\n2: No\n");
        scanf(" %c", &admit);
        if (admit=='1')
        
            admitPatient(patient, appt);
        
    


【问题讨论】:

第一个问题:scanf("%i", &amp;search);。当 %i 指令需要指向 int 的指针时,它提供了指向 char 数组的指针。同样,search==patient[c].patientID 几乎肯定是错误的,因为将数组作为比较器操作数之一是没有意义的(不知道patientID 是什么,因为您没有提供完整的代码)。另外,建议您使用调试器来帮助您自行查找问题。 【参考方案1】:
char search[6], admit;
scanf("%i", &search);
if (search==patient[c].patientID)

改成

int search; // This allows the rest of the code to match

或改成

char search[6], admit; //Change the rest of the code to match
scanf("%s", &search);
if (strcmp(search, patient[c].patientID) == 0)
printf("Patient ID: %s", patient[c].patientID);

以相同的格式进行输入和比较。

确保您的搜索数组足够大以包含最后的 '\0'

【讨论】:

以上是关于在保存到文件的结构中线性搜索元素的主要内容,如果未能解决你的问题,请参考以下文章

STL 容器

20172303 2018-2019-1 《程序设计与数据结构》第2周学习总结

在matlab中保存和读取巨大的结构?

线性表--02---顺序表

数据结构入门

线性表的简单应用