0

我有一个 void display_a_student()使用两个二进制文件的函数。首先是 binary1.dat 和 index.dat,其中包含添加到 binary1.dat 的每个学生的偏移量。

我正在尝试使用索引来查找用户输入的学生的偏移值,我无法使用 strcmp() 函数将输入的值与 index.dat 文件中保存的值进行比较。

到目前为止,任何帮助将不胜感激。

void display_a_student()
{
        struct student aStudent;

        char studentNumSearch[11];
        int index=0;
        int found = false;

        fp = fopen("binary1.dat", "a+b");
        fp1 = fopen("index.dat", "a+b");

        printf("\n\nWhich student are you searching for?");
        scanf("%s", studentNumSearch);
        fflush(stdin);

    while(!found && index < 10)
    {
        if(strcmp(studentNumSearch,fp1[index].studentNum)==0)
        {
            found = true;
        }
        index++;
    }

    if (found)
    {
        fseek(fp, fp1[index].offset, SEEK_SET);
        fread(&aStudent,sizeof(struct student),1,fp);
        printf("\n\nThe student name is %s\n",aStudent.firstName);
    }
    else
    {
        printf("\n\nNo such student\n");

    }

    fclose( fp ); /* fclose closes file */
    fclose (fp1);
    getchar();

}

我确定这一行: if(strcmp(studentNumSearch,fp1[index].studentNum)==0) 是我出错的地方,因为我不确定在使用 strcmp() 函数时如何指向文件。- 编辑相关性的代码。

4

2 回答 2

5

strcmp用于字符串比较。用于memcmp二进制比较。

主要问题是您访问fp1[index]. 当您访问从未分配的 FILE 元素时,这将不起作用。fp1 不是一个数组,而是一个 FILE 指针。

您需要使用fscanffread从文件中读取,并fseek根据每个条目的索引和大小在文件中正确定位。

于 2011-03-31T12:32:19.730 回答
-1

我不认为你应该使用 strcmp,你必须使用 fread 复制到一个结构中,然后使用你想要的 strcmp。如果您必须使用您所做的方式..您使用 memcmp 而不是 strcmp,但正如 Benoit 所说,您需要在执行 cmp 之前知道长度。

于 2011-03-31T15:52:49.120 回答